码迷,mamicode.com
首页 > 编程语言 > 详细

python——类的内置方法

时间:2018-01-22 17:30:09      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:return   ret   lex   字符串长度   func   def   fun   blog   内存   

双下方法

__str__和__repr__

改变对象的字符串显示__str__,__repr__

obj.__str__ str(obj)
obj.__repr__ repr(obj)

class Teacher:
    def __init__(self,name,salary):
        self.name = name
        self.salary = salary
    def __str__(self):
        return "Teacher‘s object :%s"%self.name
    def __repr__(self):
        return str(self.__dict__)
    def func(self):
        return wahaha
nezha = Teacher(哪吒,250)
print(nezha)  # 打印一个对象的时候,就是调用a.__str__
print(repr(nezha))
print(>>> %r%nezha)

 

repr 是str的备胎,但str不能做repr的备胎

print(obj)/‘%s‘%obj/str(obj)的时候,实际上是内部调用了obj.__str__方法,如果str方法有,那么他返回的必定是一个字符串
如果没有__str__方法,会先找本类中的__repr__方法,再没有再找父类中的__str__。
repr(),只会找__repr__,如果没有找父类的

__del__

class A:
    def __del__(self):   # 析构函数: 在删除一个对象之前进行一些收尾工作
        self.f.close()
a = A()
a.f = open()   # 打开文件 第一 在操作系统中打开了一个文件 拿到了文件操作符存在了内存中
del a          # a.f 拿到了文件操作符消失在了内存中
del a   # del 既执行了这个方法,又删除了变量
引用计数

__call__

构造方法的执行是由创建对象触发的,即:对象 = 类名() ;

而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()

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

__len__

class A:
    def __init__(self):
        self.a = 2
        self.b = 2

    def __len__(self):
        return len(self.__dict__)
a = A()
print(len(a))

结果:2#计算字符串长度

 

python——类的内置方法

标签:return   ret   lex   字符串长度   func   def   fun   blog   内存   

原文地址:https://www.cnblogs.com/chenshuaiv587/p/8329507.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!