str  repr:

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

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

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

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

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

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

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

format   __format__():

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

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

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

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

  1. class Teacher:
  2. def __call__(self):
  3. print(123)
  4. def call(self):
  5. print(321)
  6. t = Teacher()
  7. t() # 123 # 相当于调用类内的__call__方法。
  8. print(callable(Teacher)) # True
  9. print(callable(t)) # True

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

  1. class A:
  2. def __eq__(self, other):
  3. if self.__dict__ == other.__dict__:
  4. return True
  5. else:
  6. return False
  7. a = A()
  8. b = A()
  9. print(a == b)
  10. a.name = 'alex'
  11. b.name = 'egon'
  12. print(a == b)

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

  1. class A:
  2. def __init__(self):
  3. # pass
  4. self.f = open('文件',encoding='utf-8',mode='w')
  5. def __del__(self):
  6. self.f.close()
  7. print('执行我啦')
  8. a = A()
  9. del a # 因为有del
  10. print(a)
  11. print('aaa')
  12. # 所以先执行__del__方法,后执行print

__new__ 构造方法:

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

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

  1. class A:
  2. __instance = None
  3. def __new__(cls,*args,**kwargs):
  4. if cls.__instance is None:
  5. obj = object.__new__(cls)
  6. cls.__instance = obj
  7. return cls.__instance
  8. def __init__(self,name,age):
  9. self.name = name
  10. self.age = age
  11. def func(self):
  12. print(self.name)
  13. a = A('顾清秋',17)
  14. a.hobby = 'Music'
  15. b = A('顾小白',17)
  16. print(a) # <__main__.A object at 0x000001EF20F69898>
  17. print(b) # <__main__.A object at 0x000001EF20F69898>
  18. print(a.name) # 顾小白
  19. print(b.name) # 顾小白
  20. print(b.hobby)
  21. # 只能创建一个内存空间,后面实例化的会把前面实例化的完全覆盖。

item :  (__getitem__,__setitem__,__delitem__)

  1. class Foo:
  2. def __init__(self,name):
  3. self.name = name
  4. def __getitem__(self, item):
  5. return self.__dict__[item]
  6. def __setitem__(self, key, value):
  7. self.__dict__[key] = value
  8. def __delitem__(self, key):
  9. self.__dict__.pop(key)
  10. f = Foo('顾清秋')
  11. print(f.name) # 顾清秋
  12. print(f['name']) # 顾清秋 相当于执行了__getitem__方法
  13. print(f.__dict__) # {'name': '顾清秋'}
  14. f['age'] = 17 # 相当于执行了 __setitem__方法
  15. print(f.__dict__) # {'age': 17, 'name': '顾清秋'}
  16. del f['age'] # 相当于执行了 __delitem__方法
  17. print(f.__dict__) # {'name': '顾清秋'}

__delattr__:

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

python's twenty_fourth day for me 内置方法的更多相关文章

  1. python基础语法18 类的内置方法(魔法方法),单例模式

    类的内置方法(魔法方法): 凡是在类内部定义,以__开头__结尾的方法,都是类的内置方法,也称之为魔法方法. 类的内置方法,会在某种条件满足下自动触发. 内置方法如下: __new__: 在__ini ...

  2. Python之面向对象之反射、内置方法

    一.静态方法(staticmethod)和类方法(classmethod) 类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静态方法:让类里的方法直接被 ...

  3. 4月17日 python学习总结 反射、object内置方法、元类

    一.反射 下述四个函数是专门用来操作类与对象属性的,如何操作? 通过字符串来操作类与对象的属性,这种操作称为反射 class People: country="China" def ...

  4. Python: list列表的11个内置方法

    先来逼逼两句: 在实际开发中,经常需要将一组(不只一个)数据存储起来,以便后边的代码使用.在VBA中有使用数组,可以把多个数据存储到一起,通过数组下标可以访问数组中的每个元素.Python 中没有数组 ...

  5. python - setitem/getitem/delitem类的内置方法

    # class 内置方法: # __setitem__ # __getitem__ # __delitem__ class Test(): X = 100 def __getitem__(self, ...

  6. python 入门基础4 --数据类型及内置方法

    今日目录: 零.解压赋值+for循环 一. 可变/不可变和有序/无序 二.基本数据类型及内置方法 1.整型 int 2.浮点型float 3.字符串类型 4.列表类型 三.后期补充内容 零.解压赋值+ ...

  7. Python之面向对象:类的内置方法

    1.def __add__(self,other): c1+c2 两个实例的加法操作就是执行__add__()方法 2.__str__(self): print一个实例的时候,执行的是__str__( ...

  8. python for循环while循环数据类型内置方法

    while 条件: 条件成立之后循环执行的子代码块 每次执行完循环体子代码之后都会重新判断条件是否成立 如果成立则继续执行子代码如果不成立则退出 break用于结束本层循环 ### 一:continu ...

  9. python面向对象基础(三)内置方法 __xx__

    __str__和__repr__,__format__ 改变对象的字符串显示__str__,__repr__ 自定制格式化字符串__format__ #_*_coding:utf-8_*_ forma ...

随机推荐

  1. OpenCV几种边缘检测的简例

    简单记录一下OpenCV的几种边缘检测函数的用法. 边缘检测算法 以Sobel边缘检测算法为例. Sobel卷积核模板为: 偏导公式为: Gx(i,j)=[f(i+1,j−1)+2f(i+1,j)+f ...

  2. LeetCode OJ:Divide Two Integers(两数相除)

    Divide two integers without using multiplication, division and mod operator. If it is overflow, retu ...

  3. 条款22:将成员变量声明为private

    protected成员变量的封装性并非高于public变量. 如果有个public的成员变量,一旦其需要改变,那么所有使用它的代码都需要改变. 如果有个protected的成员变量,一点其需要改变,那 ...

  4. 剑指offer--31.二叉树中和为某一值的路径

    深度优先搜索 --------------------------------------------------------------------------------------------- ...

  5. 网站 安全 ---- 常见的 web 攻击

    网站 安全 ---- 常见的 web 攻击 1 sql 注入(常用的攻击性)(django的orm是做过sql防护处理的) 危害: 非法读取,篡改,删除数据库中的数据 盗取用户的各类敏感信息.获取利益 ...

  6. Linux SSH的命令详解[转]

    http://www.linuxidc.com/Linux/2008-02/11055.htm前一阵远程维护Linux服务器,使用的是SSH,传说中的secure shell. 登陆:ssh [hos ...

  7. 旧书重温:0day2【6】bind_shell

    学习了以上5节课,我们学到了很多知识,例如如何动态获取指定函数的地址:我们也学到了很多经验,例如如何发现代码中的错误,如何用od定位到错误,并修正. 有了以上积累,今天我们继续实验bind_shell ...

  8. 安装PL/SQL客户端来访问操作步骤

    1 2 3.改变路径 4 5 6 7 8 9.选择注册机 10

  9. iOS6 自动布局 入门–Auto Layout

    目前为止,即使你的界面设计是在合理的复杂度内,你也必须要为之写许多代码来适应变化的布局.现在我相信你会很高兴听到这种情况将不会发生了-对于iPhone与iPad IOS6 带来了一个非常了不起的特征: ...

  10. JDBC 4 PreparedStatement 与Statement 的区别

    1  有安全性 PreparedStatement 可以由于不是使用拼接,防止了sql注入,提高了安全性. 2  更方便 PreparedStatement 可以自动对类型进行转换,代码可读性,可维护 ...