str&repr的使用&format模板的自定义

str与repr并不存在优先级,本质上执行print就是在调用系统的__str__方法,而repr作用在python编辑器中,所以只用在str不存在时,print会找repr来顶替使用

实现代码如下:

 1 class Run:
 2     def __init__(self,name,age):
 3         self.name=name
 4         self.age=age
 5     # def __str__(self):
 6     #     return '这是str的 名字叫%s年龄是%s'%(self.name,self.age)
 7 
 8     def __repr__(self):  #python解释器调用的
 9         return  '这是repr的 名字叫%s年龄是%s' % (self.name, self.age)
10 
11 r1=Run('Kevin',23)
12 print(r1) #本质上执行print就是在调用__str__方法

 但不管如何,返回值必须为字符串类型,否则直接抛异常

format下面使用的字典或者变量不要与它重名

参考下面的示例:

 1 class Foo:
 2 
 3     def __init__(self,year,mon,day):
 4         self.year=year
 5         self.mon=mon
 6         self.day=day
 7 
 8     def __format__(self, format_spec):
 9          print('*****************')
10          # print(format_spec)
11          # print(self.year)
12 
13          fm=mat[format_spec]
14          return fm.format(self)
15 
16 f1=Foo(2018,7,2)
17 print(format(f1,'dmy'))
18 print(format(f1,'y-m-d'))
19 print(format(f1,'m:d:y'))
20 
21 print('{0}年{1}月{2}日'.format(2018,7,2))

__slots__用来强行限定类的实例化对象能拥有的属性,超出的会报错

 1 class Roo:
 2      __slots__ = ['name','age']
 3     #   __slots__ = 'name'
 4 rt=Roo()
 5 rt.name='tom'
 6 rt.age=18
 7 # rt.sex='man'
 8 # print(rt.__dict__)
 9 print(Roo.__slots__)
10 print(rt.__slots__)
11 print(rt.name,rt.age)

 __doc__不会被子类继承,默认存在且值为None

析构函数__del__主要是在垃圾回收内存清理时会触发,如果仅仅是删除对象的元素属性,则不会触发

实现代码:

 1 class Realy:
 2     def __del__(self):
 3         print('执行我了')
 4 
 5 re=Realy()
 6 
 7 re.name='tom'
 8 del re.name  #不会触发del
 9 del re       #会触发del
10 print('******************')

 对象后面加括号,可以调用类里面的__call__方法  (如s1.()  )

原文地址:https://www.cnblogs.com/wen-kang/p/9252177.html