Python基础十四:面向对象编程三:属性

时间:2022-12-20 14:58:37

Python基础十四:属性


Python基础系列内容为学习廖雪峰老师Python3教程的记录,廖雪峰老师官网地址:廖雪峰Python3教程


Author:yooongchun

Email:yooongchun@foxmail.com


  • 获取对象信息:在Python中要获取对象的信息可以使用这几个函数:type(),isinstance(),dir()

    • type用法示例:
    >>> type(123)
    <class 'int'> >>> type('www') <class 'str'> >>> type([123]) <class 'list'> >>> type((122,123)) <class 'tuple'> >>> type({'name':'bob'}) <class 'dict'>
    • 判断是否属于函数
    >>> import types
    >>> type(abs)
    <class 'builtin_function_or_method'> >>> type(abs)==types.BuiltinFunctionType True
    • isinstance用法示例
    >>> isinstance(abs,types.BuiltinFunctionType)
    True
    >>> isinstance(123,int)
    True
    >>> isinstance('12',str)
    True
    >>> isinstance([12],list)
    True
    >>> isinstance([12],(list,tuple))
    True
    >>> isinstance({'bbb':122},(list,tuple))
    False
    • dir用法示例:其返回一个对象的所有属性和方法
    >>> dir(int)
    ['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
    
  • 属性:__xxx__的属性和方法在Python中都是有特殊用途的,比如__len__方法返回长度。在Python中,如果你调用len()函数试图获取一个对象的长度,实际上,在len()函数内部,它自动去调用该对象的__len__()方法,所以,下面的代码是等价的:

    >>> len('123')
    3
    >>> '123'.__len__()
    3

    这样当想为自己写的类添加len(xxx)用法时只需在定义时添加__len__()函数。

    在列出对象的属性后,配合getattr(),setattr()hasattr()方法可以直接操作一个对象的状态。

    >>> class MyObject(object):
    ...     def __init__(self):
    ...             self.x=9
    ...
    >>> obj=MyObject()
    >>> hasattr(obj,'x')
    True
    >>> obj.x
    9
    >>> setattr(obj,'y',11)
    >>> hasattr(obj,'y')
    True
    >>> getattr(obj,'y')
    11