Python 类的内建函数

对于类、实例和其它对象而言,存在着一些内建函数,这些内建函数无需定义,可直接调用。本关的任务就是让学习者掌握并能使用这些内建函数。


 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方法。例如:

 
  1. class parentClass:
  2. def __init__(self):
  3. self.name = "parent"
  4. def tell(self):
  5. print("this is parentClass")
  6. class subClass(parentClass):
  7. def tell(self):
  8. print("this is subClass")
  9. super(subClass,self).tell()
  10. sc = subClass()
  11. sc.tell()

结果为:

 
  1. this is subClass
  2. this is parentClass

上面的例子中,我们将寻找父类的任务交给子类,这样既可保证代码的安全,修改起来也很方便。

#####vars() vars()是用来返回对象的属性及其值的一个字典。如果没有给出对象,则返回当前调用位置的属性和属性值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值