跳至主要內容

面向对象编程三:属性

yczha大约 2 分钟python基础python语法python

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

  • 获取对象信息:在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