str  repr:

1,当需要使用__str__的场景时找不到__str__就找__repr__

2,当需要使用__repr__的场景时找不到__repr__的时候就找父类的repr.

3,双下repr是双下str的备胎。

class Teacher:
def __init__(self,name,age):
self.name = name
self.age = age
def __str__(self):
return "Teacher's object %s" % self.name
def __repr__(self):
return "repr function %s" % self.name
a = Teacher('alex',30)
b = Teacher('egon',20)
print(a) # 先找__str__,若有就执行,若没有就找__repr__,再没有就找object里的__str__返回内存地址。
print(repr(a)) # 先找__repr_-,若有就执行,若没有则找object里的__repr__返回内存地址。

len() 和 obj.__len__()  的返回值是一致的。

len() 的结果是依赖obj.__len__().

class A:
def __len__(self):
return 1 # 自定返回值。
def len(obj):
return obj.__len__()
a = A()
print(a.__len__())
print(len(a)) ## 归一化z设计的原因:更接近面向函数编程。

format   __format__():

class School:
def __init__(self,name,addr):
self.name = name
self.addr = addr
def __format__(self, format_spec):
if not format_spec or format_spec not in format_dict: # 如果没传参数或穿的参数不在format_dict中
format_spec = 'nat' # 形参 format_spec = 'nat'
fmt = format_dict[format_spec] # 将字典中的格式赋值给一个fmt变量
return fmt.format(obj = self)
s = School('oldboy','beijing')
print(format(s,'nat')) # oldboy-beijing
print(format(s,'tan')) # oldboy:beijing

__call__:  对象名() 相当于调用类内置的__call__

    一个对象是否可调用,完全取决于这个对象对应的类是否实现了__call__.

callable:  查看对象可否调用,返回bool值。

class Teacher:
def __call__(self):
print(123)
def call(self):
print(321)
t = Teacher()
t() # 123 # 相当于调用类内的__call__方法。
print(callable(Teacher)) # True
print(callable(t)) # True

__eq__:  ==  是由  __eq__  的返回值来决定的。

class A:
def __eq__(self, other):
if self.__dict__ == other.__dict__:
return True
else:
return False
a = A()
b = A()
print(a == b)
a.name = 'alex'
b.name = 'egon'
print(a == b)

__del__  析构方法:在删除一个对象的时候做一些收尾工作。

class A:
def __init__(self):
# pass
self.f = open('文件',encoding='utf-8',mode='w')
def __del__(self):
self.f.close()
print('执行我啦')
a = A()
del a # 因为有del
print(a)
print('aaa')
# 所以先执行__del__方法,后执行print

__new__ 构造方法:

    1,实例化的时候  2,在创建对象的过程使用__new__  3,后面才是__init__初始化。

*****设计模式  ——  单例模式:就是一个类就只能创建一个空间共对象使用。(只能有一个实例)

class A:
__instance = None
def __new__(cls,*args,**kwargs):
if cls.__instance is None:
obj = object.__new__(cls)
cls.__instance = obj
return cls.__instance
def __init__(self,name,age):
self.name = name
self.age = age
def func(self):
print(self.name)
a = A('顾清秋',17)
a.hobby = 'Music'
b = A('顾小白',17)
print(a) # <__main__.A object at 0x000001EF20F69898>
print(b) # <__main__.A object at 0x000001EF20F69898>
print(a.name) # 顾小白
print(b.name) # 顾小白
print(b.hobby)
# 只能创建一个内存空间,后面实例化的会把前面实例化的完全覆盖。

item :  (__getitem__,__setitem__,__delitem__)

class Foo:
def __init__(self,name):
self.name = name
def __getitem__(self, item):
return self.__dict__[item]
def __setitem__(self, key, value):
self.__dict__[key] = value
def __delitem__(self, key):
self.__dict__.pop(key)
f = Foo('顾清秋')
print(f.name) # 顾清秋
print(f['name']) # 顾清秋 相当于执行了__getitem__方法
print(f.__dict__) # {'name': '顾清秋'}
f['age'] = 17 # 相当于执行了 __setitem__方法
print(f.__dict__) # {'age': 17, 'name': '顾清秋'}
del f['age'] # 相当于执行了 __delitem__方法
print(f.__dict__) # {'name': '顾清秋'}

__delattr__:

class Foo:
def __init__(self,name):
self.name = name
def __delattr__(self, item):
print('del obj.key时,我执行了')
self.__dict__.pop(item)
f = Foo('顾小白')
del f.name # 相当于执行了__delattr__方法
# delattr(f,'name')

最新文章

  1. PHP中Strict Standards错误解决方法二
  2. Fiddler 手机端证书安装No root certificate was found
  3. request, session, application辨析(待更新)
  4. velocityjs 动画库 比jquery默认的animate强
  5. c++ type_info and typeid
  6. 普通SQL语句可以用Exec执行
  7. 2016.7.7 计算机网络复习要点第四章之网际协议IP
  8. 配置当前用户使用豆瓣pip源
  9. 161027、Java 中的 12 大要素及其他因素
  10. Daily Scrum6
  11. Android实现Filterable通过输入文本框实现联系人自动筛选
  12. codeforces C. Inna and Huge Candy Matrix
  13. c语言string.h和memory.h某些函数重复问题
  14. Ansible1:简介与基本安装【转】
  15. SpringBoot是怎么在实例化时候将bean加载进入容器中
  16. frontpage 2010.2003绿色版
  17. 【Java】 剑指offer(39) 数组中出现次数超过一半的数字
  18. Django基础十之Form和ModelForm组件
  19. 【洛谷】1477:[NOI2008]假面舞会【图论】
  20. jmeter分布式环境

热门文章

  1. linux的find命令详解
  2. S5PV210启动过程详解1
  3. 制作.bat文件运行指定目录的.bat或者exe
  4. Java基础学习-extends继承(成员变量,局部变量,成员方法)
  5. 剑指Offer(第二版)面试案例:树中两个节点的最低公共祖先节点
  6. Android 进阶9:进程通信之 AIDL 解析
  7. windows10 配置apache+php+mysql
  8. Linux字符界面访问U盘
  9. Ubuntu server 安装samba
  10. Servlet和JSP规范与Tomcat版本对应关系