Python面向对象(特殊成员)
day25
__init__ 类()自动执行
__del__
__call__ 对象() 类()() 自动执行
__int__ int(对象)
__str__ str()
特殊成员
class Foo:
def __init__(self):
print('init') def __call__(self, *argc, **kwarge):
print('call') obj = Foo()#直接执行__init__ obj()#执行__call__中内容 Foo()()#同上
对象加括号,obj()执行__call__()。
执行结果:
init
call
init
call Process finished with exit code 0
__str__,__int__
class Foo:
def __init__(self):
pass def __int__(self):
return 111 def __str__(self):
return "nizhipeng"
obj = Foo() print(obj, type(obj)) r = int(obj)#自动执行__int__方法,并将返回值给int对象
print(r) print(str(obj))
类型转换的时候,自动执行__int__,和__str__方法。
执行结果:
nizhipeng <class '__main__.Foo'>
111
nizhipeng Process finished with exit code 0
自动转换
class Foo:
def __init__(self, n, a):
self.name = n
self.age = a
def __str__(self):
return '%s-%s' %(self.name, self.age) obj = Foo('alex', 18)
print(obj) #obj自动转成了str类型
第9行自动执行了str(obj)。
执行结果:
alex-18 Process finished with exit code 0
__add__
class Foo: def __init__(self, name, age):
self.name = name
self.age = age def __add__(self, other):
#self为obj1包含信息(alex,18)
#other为obj2包含信息(eiro,66) '''return self.age + other.age'''
return Foo(obj1.name, other.age)#对象1的名字,对象2的年龄 def __del__(self):
print("析构方法")#对象销毁时执行 obj1 = Foo('alex', 19)
obj2 = Foo('eiro', 66) r = obj1 + obj2#两个对象相加时,自动执行第一个对象的__add__方法,并且将第二个对象当作参数 print(r.age, type(r))
两个对象相加时,自动执行第一个对象的__add__方法,并且将第二个对象当作参数
执行结果:
66 <class '__main__.Foo'>
析构方法
析构方法
析构方法 Process finished with exit code 0
__dict__
class Foo: '''
注释也是类成员
'''
def __init__(self, name, age):
self.name = name
self.age = age
self.n = 123 obj = Foo('alex', 18) d = obj.__dict__#通过字典形式显示对象成员
print(d) ret = Foo.__dict__#通过字典形式显示类成员
print(ret)
__dict__()可以通过字典显示类成员,和对象成员。注释也是类成员的一部分。
执行结果:
{'name': 'alex', 'age': 18, 'n': 123}
{'__init__': <function Foo.__init__ at 0x7fb7f3155620>, '__doc__': '\n 注释也是类成员\n ', '__weakref__': <attribute '__weakref__' of 'Foo' objects>, '__dict__': <attribute '__dict__' of 'Foo' objects>, '__module__': '__main__'}
44 Process finished with exit code 0
__getitem__,__setitem__,__delitem__
class Foo:
def __init__(self, name, age):
self.name = name
self.age = age def __getitem__(self, item):
return item+10 def __setitem__(self, key, value):
print(key, value) def __delitem__(self, key):
print(key)
li = Foo('alex', 18)
#以索引方式访问对象,执行__getitem__方法 r = li[8]#自动执行li对象类中的__getitem__方法, 8作为参数给item
print(r)#有获取数据属于需要返回值 li[100] = 'aasd'#执行__setitem__(), key为100,value为aasd del li[999]#执行__delitem__()
以索引方式访问需要以上几种特殊方法。
__setitem__,__delitem__并不获取数据,不需要return。
执行结果:
18
100 aasd
999 Process finished with exit code 0
__iter__
class Foo:
def __init__(self, name, age):
self.name = name
self.age = age def __iter__(self):
return iter([11,22,33])#生成迭代器对象
#如果类中有__iter__方法,对象为可迭代对象
#对象.__iter__()的返回值:迭代器
li = Foo('alex', 18) for i in li:
print(i)
如果类中有__iter__方法,对象为可迭代对象,iter()生成迭代对象。
执行结果:
Process finished with exit code
__new__ 和 __metaclass__
Foo类其实为type类的对象。
所有类默认继承object类。
http://www.cnblogs.com/wupeiqi/p/4766801.html
其中第11节
class MyType(type):
#self 为 Foo
def __init__(self, *args, **kwargs):
print('')
pass def __call__(cls):
print('') #Foo为MyType对象
class Foo(object,metaclass=MyType):#任何类都继承object类,并使Foo类为type类子类MyType的对象
def __init__(self):
print('') def func(self):
print('hello') #使Foo类为type类子类MyType的对象,创建Foo对象时会执行类中的__init__()方法
#输出 123 #有__call__方法时输出456,对象加(),执行__call__方法,Foo是MyType的一个对象。
#没有时输出567,Foo类创建obj对象,执行__init__方法。
obj = Foo()
任何类都继承object类,并使Foo类为type类子类MyType的对象
执行结果:
123
456 Process finished with exit code 0
Python面向对象(特殊成员)的更多相关文章
- Python面向对象之成员修饰符
对于这些类成员有修饰符 之前定义字段country任何对象都可以访问,是公有的 可以定义为私用属性,只有类内部的方法可以调用,外部不能直接调用,但是可以间接调用 vim day7-10.py #!/u ...
- python面向对象之类成员
面向对象编程: OOP编程是利用类和对象来创建各种模型来实现对真实世界的描述,使用面向对象编程的原因一方面是因为它可以使程序的维护和扩展变得简单,并可以大大提高程序开发效率.另外,基于面向对象的程序可 ...
- python面向对象之类成员修饰符
类的所有成员分为: 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能访问 私有成员和公有成员的定义不同:私有成员命名时,前两个字符是下划线.(特殊成员除外,例如:__init__.__c ...
- Python面向对象-类成员
类的成员可以分为三大类:字段.方法和属性: 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段.而其他的成员,则都是保存在类中,即:无论对象的多少,在 ...
- python 面向对象(二)成员
##################################总结########################### 类的成员: 变量: 实例变量 对象.属性=xxx 类变量 ...
- python 面向对象类成员(字段 方法 属性)
一.字段 字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, 普通字段属于对象 静态字段属于类 class Province: # 静态字段 countr ...
- python面向对象的成员、属性等
#类成员: #字段 self.xy =qq . xy=qq #普通字段 (保存在对象里面) #直接通过点(.)+ 字段 进行调用 #静态字段 (保存在类里面) #静态字段属于类,在内存只保留一份 . ...
- python面向对象(二)——类成员
Python面向对象 类成员 1.字段 普通字段 属于对象 静态字段 属于类 2.方法 普通方法 触发者是对象 括号里至少一个参数 se ...
- python 面向对象和类成员和异常处理
python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...
随机推荐
- docker实战
docker基础入门 docker网络
- bzr: ERROR: These branches have diverged. Use the missing command to see how.
这个错误是在提交之后执行bzr pull时出现的,先uncommit,再pull就可以了.
- 766A Mahmoud and Longest Uncommon Subsequence
A. Mahmoud and Longest Uncommon Subsequence time limit per test 2 seconds memory limit per test 256 ...
- 品味性能之道<三>:方法论
自顶向下的性能优化方法论 系统优化是包括系统设计.开发.产品上线.平台优化的全过程,不同阶段的优化工作对全系统所带来的效益是不同的.理想的性能优化论应该采用自顶向下的优化方法,即在项目设计.开发和上线 ...
- part1:14-开发板介绍和开发板系统安装准备
开发板介绍: Norflash与nandflash都充当硬盘,前者容量小,速度快,价格高:后者容量大,速度相对慢,价格低. 一般把这些系统都安装到nandflash里面. 1.安装到nandflash ...
- python函数、装饰器、迭代器、生成器
目录: 函数补充进阶 函数对象 函数的嵌套 名称空间与作用域 闭包函数 函数之装饰器 函数之迭代器 函数之生成器 内置函数 一.函数补充进阶 1.函数对象: 函数是第一类对象,即函数可以当作数据传递 ...
- 20155333 2016-2017-2 《Java程序设计》第五周学习总结
20155333 2016-2017-2 <Java程序设计>第五周学习总结 教材学习内容总结 1.使用try.catch语法 与C语言中程序流程和错误处理混在一起不同,Java中把正常流 ...
- 2018.07.03 POJ 1279Art Gallery(半平面交)
Art Gallery Time Limit: 1000MS Memory Limit: 10000K Description The art galleries of the new and ver ...
- FIR IP
(1)多通道系数处理 系数的格式 (1) 每组系数的长度必须一样长: (2)多组系数依次连接即可; 添加多组系数后会,FIR IP核在生成时会多出以下几个信号 .s_axis_config ...
- day03(接口,多态)
接口: 概念:是功能的集合,可以当做引用数据类型的一种.比抽象类更加抽象. 接口的成员: 成员变量:必须使用final修饰 默认被 public &a ...