类的内置方法

内置的类方法与内置函数之间有着密切的关系

双下方法:①obj.__str__  str(obj)   ②obj.__repr__  repr(obj)

str方法:

class A:
    pass
    def __str__(self):  
        return 'A'
a = A()
print(str(a))             # 此时输出的为类A中的方法,若类A中午str方法则输出obj中的
print(a)
print('%s:%s'%('A',a)) # %s str() 直接打印 :实际上都是走的 __str__
 

 

repr方法:

class Teacher:
    def __init__(self,name,salary):
        self.name = name
        self.salary = salary

    def __str__(self):
        return 'Teacher is object: %s'%self.name
    def __repr__(self):
        return str(self.__dict__)
    def func(self):
        return 'lalala'

zhangsan = Teacher('张三',5000)
print(zhangsan)       # 在直接调用print(对象),就是调用的zhangsan.__str__
print(str(zhangsan))
print(repr(zhangsan))
print('%r'%zhangsan)  #   %r 和 repr() 实际上走的都是__repr__方法
但是repr可以是str的备胎 反之则不行(即调用str方法时候,在类里找不到str可以去找repr)

print(obj) / '%s'%obj / str(obj)  的时候,实际上是内部调用了obj.__str__方法,如果有str方法,那么它返回的必定是一个字符串

如果没有__str__方法,会先找本类的__repr__方法,再没有就找父类的__str__

repr(obj),只会找__repr__,如果没有就找父类的

 

析构函数:在删除函数之前进行收尾工作

1 class A:
2     def __del__(self):     
3         self.f.close()  # 在文件操作符消失之前,先执行这个方法,关闭了文件
4 a = A()
5 a.f = open()            # 打开文件 第一 在操作系统中打开一个文件 拿到了文件操作符存在了内存中
6 del a                   # a.f 拿到了文件操作符并消失在内存中      

 

__call__方法:把实例对象作为函数调用,即实例化一个对象后,在对象后面加括号即可调用__call__方法

class A:
    def __init__(self,name):
        self.name = name
    def __call__(self,):
        for k in self.__dict__:
            print(self.__dict__[k])      # 打印这个对象的所有属性

a = A('张三')                             # a = A('张三')()
a()

 

  

posted on 2019-02-24 16:20  Chen_char  阅读(145)  评论(0)    收藏  举报

导航