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'
>>> 

  

posted on 2018-02-28 16:53  nicolas_Z  阅读(144)  评论(0)    收藏  举报

导航