Python面向对象编程(5)——类的特殊方法
来源:互联网 发布:windows Api编程过程 编辑:程序博客网 时间:2024/06/05 15:22
类的特殊方法
1 深入理解类
类本质上也是一个对象,只是其拥有创建自身实例的能力
类可以与变量进行绑定,并且可以为类增加属性
可以把类作为函数的参数传递
2 元类
类的创建和管理者(type),所有的类都是元类的实例
isinstance(Empty,type)查看Empty是否是type的实例
类实例化过程:__new__()、__init__()
classtestCustom:
def __init__(self):
print("Init method...")
def __new__(cls,*args,**kwargs):
print("New method...")
return object.__new__(cls,*args,**kwargs)
testCustom()
自定义元类
目的:可以对创建的类进行预处理(继承元类)
classMyMeta(type):
def __init__(self,name,bases,dicts):
print("Init method...")
def __new__(cls,name,bases,dicts):
dicts['info']=lambdaself:print("LearningPython...")
res=type.__new__(cls,name,bases,dicts)
res.school="XiDian University"
return res;
classCustom(metaclass=MyMeta):
pass
if__name__ == '__main__':
cus=Custom()
cus.info()
print(cus.school)
3 构造序列
实现这四个方法中的某些方法:__len__(self)、__getitem__(self,key)、__setitem__(self,key,value)、__delitem__(self,key)
classMySeq:
def __init__(self):
self.sleq=["I","II","III","IV"]
def __len__(self):
return len(self.sleq)
def __getitem__(self,key):
if 0<=key<self.__len__():
return self.sleq[key]
if__name__ == '__main__':
mySeq=MySeq()
for i in range(mySeq.__len__()):
print(mySeq[i])
4 构造iter
实现__iter__(self)、__next__(self)
classMyIter:
def __init__(self,start,end):
self.count=start;
self.end=end;
def __iter__(self):
return self;
def __next__(self):
if self.count<self.end:
r=self.count
self.count+=1
return r
else:
raise StopIteration
if__name__ == '__main__':
for i in MyIter(1,10):
print(i)
5 可比较的类
实现__lt__(),__le__(),__gt__(),__ge__(),__eq__(),__ne__()部分方法
classPoint:
def __init__(self,x,y):
self.x=x
self.y=y
def __lt__(self,oth): #小于的比较
return self.x<oth.x
def __gt__(self,oth): #大于号的比较
return self.y>oth.y
if__name__ == '__main__':
p1=Point(1,0)
p2=Point(0,1)
print(p1<p2)
print(p2>p1)
6构造可运算的类
实现__add__(),__sub__(),__mul__(),__div__()协议可以实现运算
classCal:
def__init__(self,num):
self.num=num
def__add__(self,oth):
returnself.num+oth.num
def__mul__(self,oth):
returnself.num*oth.num
if__name__ =='__main__':
c1=Cal(2)
c2=Cal(3);
print(c1+c2)
print(c1*c2)
0 0
- Python面向对象编程(5)——类的特殊方法
- python中面向对象编程的特殊方法
- python面向对象编程(2):特殊方法
- Python面向对象5:特殊方法
- Python面向对象编程(4)——类的继承与方法重载
- Python 面向对象 —— 特殊函数
- python面向对象编程(2)—— 实例属性,类属性,类方法,静态方法
- Python面向对象编程(3)——类方法、静态方法
- 【Python基础】Python面向对象 - 4 - 定制类的特殊方法
- [Python]面向对象编程---类、实例、方法的对比(4)
- Python面向对象编程——类、对象、属性、方法示例代码
- PHP面向对象编程 面向对象的特殊实践
- Python面向对象编程(2)——深入类的属性
- Python面向对象编程(1)——属性分类、方法调用
- Python一天入门15:面向对象的编程2-类与对象的方法
- Python面向对象的编程
- python 面向对象的编程
- Python面向对象的编程
- C语言 内存管理
- 全排列问题的JAVA代码
- Linux 系统下 NVIDIA 显卡驱动,GNOME 桌面环境不兼容
- 洛谷 3654_First Step (ファーストステップ)_模拟
- 数组排序sort()用法
- Python面向对象编程(5)——类的特殊方法
- pinterest怎么打不开了,打不开Pinterest的办法
- Google Analytics使用说明
- test
- 小白的python机器学习路(关于代码中逗号的使用以及ZIP函数和矩阵合并函数的使用)
- 如何学习js(转载)
- windows下创建与使用动态链接库
- Qt显示pdf系列3——配置编译谷歌开源项目pdfium
- C++中return语句的用法