首页
IT
登录
6mi
u
盘
搜
搜 索
IT
Python面向对象编程(5)——类的特殊方法
Python面向对象编程(5)——类的特殊方法
xiaoxiao
2021-03-25
63
类的特殊方法
1 深入理解类
类本质上也是一个对象,只是其拥有创建自身实例的能力
类可以与变量进行绑定,并且可以为类增加属性
可以把类作为函数的参数传递
2 元类
类的创建和管理者(type),所有的类都是元类的实例
isinstance(Empty,type)查看Empty是否是type的实例
类实例化过程:__new__()、__init__()
class
testCustom:
def
__init__(self):
print
(
"Init method..."
)
def
__new__(cls,*args,**kwargs):
print
(
"New method..."
)
return
object.__new__(cls,*args,**kwargs)
testCustom()
自定义元类
目的:可以对创建的类进行预处理(继承元类)
class
MyMeta(type):
def
__init__(self,name,bases,dicts):
print
(
"Init method..."
)
def
__new__(cls,name,bases,dicts):
dicts[
'info'
]=
lambda
self:
print
(
"Learning Python..."
)
res=type.__new__(cls,name,bases,dicts)
res.school=
"XiDian University"
return
res;
class
Custom(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)
class
MySeq:
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)
class
MyIter:
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__()部分方法
class
Point:
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__()协议可以实现运算
class
Cal
:
def
__init__
(
self
,num):
self
.num=num
def
__add__
(
self
,oth):
return
self
.num+oth.num
def
__mul__
(
self
,oth):
return
self
.num*oth.num
if
__name__ ==
'__main__'
:
c1=Cal(
2
)
c2=Cal(
3
);
print
(c1+c2)
print
(c1*c2)
转载请注明原文地址: https://ju.6miu.com/read-35366.html
技术
最新回复
(
0
)