对于类、实例和其它对象而言,存在着一些内建函数,这些内建函数无需定义,可直接调用。本关的任务就是让学习者掌握并能使用这些内建函数。
issubclass()
是一个布尔函数,这个函数用来判断一个类是否是另外一个类的子类或者子孙类。如果给出的子类确实是给出的父类的子类,则返回True
,否则返回False
。它的语法如下:
issubclass(subclass, parentclass)
parentclass
也可以是一个包含若干个父类的元组,只要子类属于元组中某一个父类,则返回True
,否则返回False
。
#####isinstance()
isinstance()
是一个布尔函数,这个函数用来判断一个对象是否是给定类的实例。若是给定类的实例或是给定类的子类的实例,则返回True
,否则返回False
。它的语法如下:
isinstance(object,class)
hasattr()
、getattr()
、setattr()
、delattr()
这几个函数可以在各种对象下工作,不限于类和实例。
- (1)
hasattr()
;hasattr()
是布尔型的,它用于判断一个对象是否有一个特定的属性,一般用于在调用某个属性前检查属性是否存在。例如:
class testClass(object):
foo = 100
def __init__(self,name):
self.name = name
test = testClass('theName')
print(hasattr(test,'name'))
print(hasattr(testClass,'foo'))
结果为:
True
True
- (2)
getattr()
、setattr()
;getattr()
是用来获取对象的属性或者方法。若返回的是对象,则返回对象的值,若返回的是对象的方法,则返回方法的内存地址。setattr()
是用来给对象的属性赋值。若属性不存在,就先创建属性然后再赋值。例如:
结果为:class testClass(object): foo = 100 def __init__(self,name): self.name = name test = testClass('theName') setattr(test,'fool','200') setattr(test,'foo','50') print(getattr(test,'fool')) print(getattr(test,'foo'))
200
50
- (3)
delattr()
。delattr()
是用来从一个对象中删除属性。
dir()
- 作用在实例上时,显示实例变量、实例所在的类、基类中定义的方法和属性;
- 作用在类上时,显示类与它的基类的
__dict__
内容; - 作用在模块上时,显示此模块的
__dict__
内容; dir()
不带参数时,显示调用者的局部变量。
例如:
class testClass(object):
foo = 100
def __init__(self,name):
self.name = name
test = testClass('theName')
print(dir(test))
结果为:
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'foo', 'fool', 'name']
super()
super()
函数的作用就是找出相应的类的父类,然后调用父类的方法与属性。例如:
class parentClass:
def __init__(self):
self.name = "parent"
def tell(self):
print("this is parentClass")
class subClass(parentClass):
def tell(self):
print("this is subClass")
parentClass.tell(self)
sc = subClass()
sc.tell()
结果为:
this is subClass
this is parentClass
在这个示例中,我们在调用父类的方法时是通过非绑定的方式调用,这样的调用方式增大了代码的耦合性。如果我们要修改subClass
的父类,则在子类的调用中也要修改相应代码。如果代码量庞大的话,这个工作几乎很难完成,所以我们采用super
方法。例如:
class parentClass:
def __init__(self):
self.name = "parent"
def tell(self):
print("this is parentClass")
class subClass(parentClass):
def tell(self):
print("this is subClass")
super(subClass,self).tell()
sc = subClass()
sc.tell()
结果为:
this is subClass
this is parentClass
上面的例子中,我们将寻找父类的任务交给子类,这样既可保证代码的安全,修改起来也很方便。
#####vars()
vars()
是用来返回对象的属性及其值的一个字典。如果没有给出对象,则返回当前调用位置的属性和属性值。