2018-06-27-Python全栈开发day27-面向对象进阶

1.内置函数补充

  1.1 instance(obj,cls)

  判断obj是否为cls的实例

class Test:
    pass
p1=Test()
print(isinstance(p1,Test))

  1.2 issubclass(sub,super)

    检查sub是否为super的子类

    

class Test(object):
    pass

print(issubclass(Test,object))

  1.3 getattribute(self,item)

    实例在调用方法时,无论是否存在,最首先的就是调用getattribute,除非抛出一个错误,才使用getattr

  

class Test:
    name='alex'
    def __getattr__(self, item):
        print('this is getattr')
    def __getattribute__(self, item):
        print('this is your father')
p1=Test()
print(p1.name)
print(p1.alex)

  如果getattribute抛出一个AttributeError,则执行getattr

  

class Test:
    name='alex'
    def __getattr__(self, item):
        print('this is getattr')
    def __getattribute__(self, item):
        # print('this is your father')
        raise AttributeError
p1=Test()
print(p1.name)
print(p1.__dict__)
print(p1.alex)

2. item系列

  2.1getitem

    和hetattr不同的是,getitem无论是否有这个方法都调用

  

class Test:

    def __init__(self,name):
        self.name=name
    def __getitem__(self, item):
        print('this is getitem')
    # def __getattribute__(self, item):
    #     # print('this is your father')
    #     raise AttributeError
p1=Test('alex')
print(p1['name'])
print(p1['good'])
print(p1.__dict__)
# print(p1.alex)

  2.2 setitem、delitem

    和attr相同,只是使用方法不同,使用[]

3. str和repr

   作用:

  在print的时候,调用str属性,

  在print和解释器的时候,调用repr属性

  

class Foo:
    def __init__(self,name):
        self.name=name
    # def __str__(self):str在print的优先级高于repr
    #     return 'this is %s' %self.name
    def __repr__(self):
        return 'good luck'
f1=Foo('yehiabin')
f1#在解释器中会直接运行repr
print(f1)--
good luck

4. 自定义format

  #暂停,晚点修改,先睡觉,有点困

    

猜你喜欢

转载自www.cnblogs.com/hai125698/p/9302403.html