isinstance
isinstance(obj1,obj2):判断对象与类之间的关系,判断第一个参数是否是第二个参数的实例。
>>> n1 = 10 >>> isinstance(n1, int) #判断n1是否是数字类型,如果是返回True如果不是防护False True >>> class A(object): ... pass ... >>> a1 = A() >>> isinstance(a1, A) # 判断a1是否是类A的对象,如果是返回True,如果不是返回False True
type()函数和isinstance()函数两者有什么区别呢?
>>> print(type(1) is int) True >>> print(isinstance(1, int)) True #从上面的结果看,两者的结果都是True,那么type()与isinstance()的区别在哪呢? #从接下来的例子,就能够清晰看出来。 class A:pass class B(A):pass b = B() print(isinstance(b, A)) # True print(isinstance(b, B)) # True print(type(b)) # <class '__main__.B'> print(type(b) is B) # True print(type(b) is A) # False #总结: isinstance()是可以用在继承的关系上;而type()不能用来检测继承关系。
issubclass
issubclass(obj1,obj2):用来描述一个类与另一个类之间的关系,判断一个类是否是另一个类的子类
class A:pass class B(A):pass print(issubclass(B, A)) # True print(issubclass(A, B)) # False # 总结: 类B是类A的子类,类A不是类B的子类
反射
什么是反射?
反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。
Python中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)
四个可以实现自省的函数:hasattr getattr setattr delattr
下列方法适用于类和对象(一切皆对象,类本身也是一个对象)
getattr()
def getattr(object, name, default=None): # known special case of getattr """ getattr(object, name[, default]) -> value Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y. When a default argument is given, it is returned when the attribute doesn't exist; without it, an exception is raised in that case. """ pass