工作小结 常见定制类

双下方法

__repr__  __str__

__str__方法  必然返回字符串

‘%s’%(对象) print(str(a)) print(直接打印对象)都是走类中__str__
%r  repr()  实际上都是走repr
repr
class A:
    def __str__(self):
        return '父类str打印中'  #如果是数字类的  需要str(1)  再返回
    def __repr__(self):
        return '父类repr打印中'
class B(A):
    def __str__(self):
        return '子类str打印中'
    def __repr__(self):
        return '子类repr打印中'
a = B()
print('%s'%(a))  #子类str打印中
print(a)   #子类str打印中
print(str(a))  #子类str打印中
print('%r'%(a))  #子类repr打印中
print(repr(a))  #子类repr打印中
如果子类中没有__str__就先用父类的str  父类没有str就先用子类的repr
class
A: def __str__(self): return '父类str打印中' def __repr__(self): return '父类repr打印中' class B(A): def __repr__(self): return '子类repr打印中' a = B() print('%s'%(a)) #父类str打印中 print(str(a)) class A: def __repr__(self): return '父类repr打印中' class B(A): def __repr__(self): return '子类repr打印中' a = B() print('%s'%(a)) 子类repr打印中 class A: def __repr__(self): return '父类repr打印中' class B(A): pass a = B() print('%s'%(a)) 父类repr打印中

__del__  如果直接执行del方法是 例如删除一个对象 他会将连带的 对象.f = open()  一块删除   但实际上改文件并没有关掉,所以需要用到__del__方法  在del时就会调用类中的__del__

    此时将 关闭文件的操作放到下面  变成先关闭文件再删除对象,完美解决

   

class A:
    def __del__(self):
        print('aaa')
        self.f.close()
a = A()
a.f = open('y.py')
del a

__call__

       一个对象加上()  a()就会执行__call__方法下面的功能,此方法适用于给程序添加一些小功能 简化了代码

__len__

  

class A:
    def __init__(self,classes):
        self.classes = classes
        self.names = []
    def __len__(self):
        return len(self.names)
a = A('xioming')
a.names.append('ergou')
a.names.append('ergou')
a.names.append('ergou')
a.names.append('ergou')
print(len(a))
print(a.names)
print(a.classes)

 

posted @ 2018-01-22 17:20  Ebola  阅读(139)  评论(0编辑  收藏  举报