1.私有化方法
和私有化属性用法一致。
class Person: __age = 18 def __run(self): print("pao") p = Person() print(Person.__dict__)
2.内置特殊方法
生命周期方法(下一小节单独介绍)
其他内置方法:
信息格式化操作:以下两个方法都是通过一个字符串,来描述实例对象,只不过面相的角色不一样。__str__面相的是用户。__repr__面相的是开发者。
__str__方法:
class Person: def __init__(self, n, a): self.name = n self.age = a def __str__(self): return "这个人的姓名是%s,这个人的年龄是%s"%(self.name, self.age) p1 = Person("fu", 18) # print(p1.name) # print(p1.age) print(p1) s1 = str(p1) print(s1) p2 = Person("张三", 28) # print(p2.name) # print(p2.age) print(p2) s2 = str(p2) print(s2)
__repr__方法:
class Person: def __init__(self, n, a): self.name = n self.age = a def __str__(self): return "这个人的姓名是%s,这个人的年龄是%s"%(self.name, self.age) def __repr__(self): return "xxxxxxxxx" p1 = Person("fu", 18) # print(p1.name) # print(p1.age) print(p1) s1 = str(p1) print(s1) p2 = Person("张三", 28) # print(p2.name) # print(p2.age) print(p2) s2 = str(p2) print(s2) print(repr(p1)) print(repr(p2))
import datetime t = datetime.datetime.now() print(t) print(repr(t)) tmp = repr(t) result = eval(tmp) print(result)
调用操作:
__call__方法:作用:使得“对象”具备当做函数,来调用的能力。
使用:
class Person: def __call__(self, *args, **kwargs): print("xxxxxxx", args, kwargs) pass p = Person() p(123, 456, name = "sz")
应用场景:有点类似于偏函数的使用
案例:要求创建很多个画笔
class Penfactry: def __init__(self, p_type): self.p_type = p_type def __call__(self, p_color): print("创建了一个%s,这个类型的画笔,它是%s颜色" % (self.p_type, p_color)) gangbiF = Penfactry("钢笔") gangbiF("红色") gangbiF("绿色") gangbiF("黄色") qianbiF = Penfactry("铅笔") qianbiF("红色") qianbiF("白色") qianbiF("黑色")