Python学习之路(13)——类与对象的内置函数
这里介绍几个类与对象的内置函数。
1、判断对象关系:issubclass和isinstance
issubclass(class, classinfo):如果class是classinfo的子类,则返回True。
注意:
1)一个类可以被认为是自身的子类
2)classinfo可以使类对象组成的元组,只要class是其中任何一个候选类的子类,就返回True
>>> class A: pass >>> class B(A): pass >>> class C: pass >>> issubclass(B, A) True >>> issubclass(B, B) True >>> issubclass(B, C) False >>> issubclass(B, object) True >>> >>> issubclass(B, (A, C)) True >>>
isinstance(object, classinfo):判断一个实例对象object是否属于类classinfo
注意:
1)如果参数一不是对象,则一定返回False
2)如果参数二不是类或者由类对象组成的元组,则抛出TypeError异常
>>> class A: pass >>> class B(A): pass >>> class C: pass >>> b1 = B() >>> a = 123 >>> isinstance(a, B) False >>> isinstance(123, B) False >>> isinstance(b1, B) True >>> isinstance(b1, A) True >>> isinstance(b1, C) False >>> isinstance(b1, (A, B, C)) True >>>
2、属性相关:hasattr、getattr、setattr、delattr、property
hasattr(object, name):测试对象objec中是否有指定的属性名name
注意:属性名name在该方法中以字符串的形式传入
>>> class C: def __init__(self, x = 0): self.name = x >>> c1 = C() >>> hasattr(c1, 'name') True >>> hasattr(c1, 'x') False >>>
getattr(object, name[, default]):返回对象指定的属性值。如果指定的属性值不存在,且设置了default,则返回default;否则返回一个AttributeError异常。
>>> class C:
def __init__(self, x = 0):
self.name = x
>>> c1 = C()
>>> getattr(c1, 'name')
0
>>> getattr(c1, 'age')
Traceback (most recent call last):
File "<pyshell#141>", line 1, in <module>
getattr(c1, 'age')
AttributeError: 'C' object has no attribute 'age'
>>> getattr(c1, 'age', '该属性不存在')
'该属性不存在'
>>>
setattr(object, name, value):设置对象中指定属性的值,如果指定属性不存在,则创建并复制该指定属性。
>>> class C:
def __init__(self, x = 0):
self.name = x
>>> c1 = C()
>>> getattr(c1, 'name')
0
>>> getattr(c1, 'age')
Traceback (most recent call last):
File "<pyshell#141>", line 1, in <module>
getattr(c1, 'age')
AttributeError: 'C' object has no attribute 'age'
>>> setattr(c1, 'name', 123)
>>> getattr(c1, 'name')
123
>>> setattr(c1, 'age', 999)
>>> getattr(c1, 'age')
999
>>>
delattr(object, name):删除对象中指定的属性
>>> class C:
def __init__(self, x = 0):
self.name = x
>>> c1 = C()
>>> c2 = C()
>>> delattr(c1, 'name')
>>> getattr(c1, 'name')
Traceback (most recent call last):
File "<pyshell#160>", line 1, in <module>
getattr(c1, 'name')
AttributeError: 'C' object has no attribute 'name'
>>> getattr(c2, 'name')
0
>>>
property(fget = None, fset = None, fdel = None, doc = None):通过属性来设置属性
>>> class C:
def __init__(self, size = 10):
self.size = size
def getsize(self):
return self.size
def setsize(self, value):
self.size = value
def delsize(self):
del self.size
x = property(getsize, setsize, delsize)
>>> c1 = C()
>>> c1.getsize()
10
>>> c1.x
10
>>> c1.x = 18
>>> c1.x
18
>>> c1.size
18
>>> c1.getsize()
18
>>> del c1.x
>>> c1.x
Traceback (most recent call last):
File "<pyshell#198>", line 1, in <module>
c1.x
File "<pyshell#189>", line 5, in getsize
return self.size
AttributeError: 'C' object has no attribute 'size'
>>> c1.size
Traceback (most recent call last):
File "<pyshell#199>", line 1, in <module>
c1.size
AttributeError: 'C' object has no attribute 'size'
>>> c1.getsize()
Traceback (most recent call last):
File "<pyshell#200>", line 1, in <module>
c1.getsize()
File "<pyshell#189>", line 5, in getsize
return self.size
AttributeError: 'C' object has no attribute 'size'
>>>
浙公网安备 33010602011771号