面向对象编程三:属性
大约 2 分钟
Python基础系列内容为学习廖雪峰老师Python3教程的记录,廖雪峰老师官网地址:廖雪峰Python3教程
获取对象信息:在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