python's twenty_fourth day for me 内置方法
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')
python's twenty_fourth day for me 内置方法的更多相关文章
- python基础语法18 类的内置方法(魔法方法),单例模式
类的内置方法(魔法方法): 凡是在类内部定义,以__开头__结尾的方法,都是类的内置方法,也称之为魔法方法. 类的内置方法,会在某种条件满足下自动触发. 内置方法如下: __new__: 在__ini ...
- Python之面向对象之反射、内置方法
一.静态方法(staticmethod)和类方法(classmethod) 类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静态方法:让类里的方法直接被 ...
- 4月17日 python学习总结 反射、object内置方法、元类
一.反射 下述四个函数是专门用来操作类与对象属性的,如何操作? 通过字符串来操作类与对象的属性,这种操作称为反射 class People: country="China" def ...
- Python: list列表的11个内置方法
先来逼逼两句: 在实际开发中,经常需要将一组(不只一个)数据存储起来,以便后边的代码使用.在VBA中有使用数组,可以把多个数据存储到一起,通过数组下标可以访问数组中的每个元素.Python 中没有数组 ...
- python - setitem/getitem/delitem类的内置方法
# class 内置方法: # __setitem__ # __getitem__ # __delitem__ class Test(): X = 100 def __getitem__(self, ...
- python 入门基础4 --数据类型及内置方法
今日目录: 零.解压赋值+for循环 一. 可变/不可变和有序/无序 二.基本数据类型及内置方法 1.整型 int 2.浮点型float 3.字符串类型 4.列表类型 三.后期补充内容 零.解压赋值+ ...
- Python之面向对象:类的内置方法
1.def __add__(self,other): c1+c2 两个实例的加法操作就是执行__add__()方法 2.__str__(self): print一个实例的时候,执行的是__str__( ...
- python for循环while循环数据类型内置方法
while 条件: 条件成立之后循环执行的子代码块 每次执行完循环体子代码之后都会重新判断条件是否成立 如果成立则继续执行子代码如果不成立则退出 break用于结束本层循环 ### 一:continu ...
- python面向对象基础(三)内置方法 __xx__
__str__和__repr__,__format__ 改变对象的字符串显示__str__,__repr__ 自定制格式化字符串__format__ #_*_coding:utf-8_*_ forma ...
随机推荐
- 51nod 1043 数位dp
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1043 1043 幸运号码 基准时间限制:1 秒 空间限制:131072 ...
- [转]页游开发中的 Python 组件与模式Presentation Transcript
转: 页游开发中的 Python 组件与模式Presentation Transcript 1. 页游开发中的 Python 组件与模式 赖勇浩( http://laiyonghao.com ) 20 ...
- golang实现图片上传
golang实现图片上传 该代码为使用beego实现前后端图片上传.话不多说,直接上代码. 1.前端代码 html代码: <div class="col-5 f-l text text ...
- [Beego] 内置的模板函数(不同格式的字符串和html的互转)
在使用beego框架的时候,常常需要把不同形式的字符串转化为html,有时候为了安全考虑会将html转义,而有时候希望能显示html标签.在存储到db中后,再取出来的显示是原本的,即html标签不会生 ...
- 前端之JavaScript 02
一.函数 // 最基础的函数定义 function f1() { console.log('hello world!'); } f1(); // hello world! // 带参数的函数 func ...
- Kafka源码深度解析-序列7 -Consumer -coordinator协议与heartbeat实现原理
转自:http://blog.csdn.net/chunlongyu/article/details/52791874 单线程的consumer 在前面我们讲过,KafkaProducer是线程安全的 ...
- 重温CLR(六)方法和参数
实例构造器和类(引用类型) 构造器是将类型的实例初始化为良好状态的特殊方法.构造器方法在“方法定义元数据表”中始终叫做.ctor(constructor的简称).创建引用类型的实例时,首先为实例的数据 ...
- 洛谷 P2879 [USACO07JAN]区间统计Tallest Cow
传送门 题目大意: n头牛,其中最高身高为h,给出r对关系(x,y) 表示x能看到y,当且仅当y>=x并且x和y中间的牛都比 他们矮的时候,求每头牛的最高身高. 题解:贪心+差分 将每头牛一开始 ...
- php webservice服务端和客户端的实现
1.创建类文件service.class.php,service类,添加若干方法. 2.用浏览器访问create_wsdl.php文件,生成service.wsdl文件. 3.修改wsdl文件,loc ...
- POI 单元格
OI 单元格合并中的CellRangeAddress 参数: CellRangeAddress(int, int, int, int) 参数:起始行号,终止行号, 起始列号,终止列号 sheet.ad ...