类的常用魔术方法
魔术方法就是不需要认为调用的方法,基本是在特定的时刻自动触发魔术方法的统一特征,方法名前后各两个下划线包裹操作类
‘__init__’: 构造函数‘__new__’: 对象实例化方法,此函数教特殊,一般不需要使用‘__call__’: 对象当函数使用的时候触发‘_str_’: 当对象被当作字符串使用的时候调用‘__repr__’: 返回字符串,跟’_str_'具体区别 描述符相关
‘__set__’‘__get__’‘__delete__’ 属性操作相关
‘__getattr__’: 访问一个不存在的属性时触发‘__setattr__’: 对成员属性进行设置的时候触发
参数:
self用来获取当前对象被设置的属性名称,以字符串形式出现需要对属性名称设置的值 作用:进行属性设置的时候进行验证或者修改注意:在该方法中不能对属性直接进行赋值操作,否则死循环 运算分类相关魔术方法
‘__gt__’: 进行大于判断的时候触发的函数
参数:
self第二个参数是第二个对象返回值可以是任意值,推荐返回布尔值
class A():
def __init__(self
,name
):
print("init,我被调用了")
def __call__(self
):
print("call,被调用了")
a
= A
("123")
a
()
init,我被调用了
call,被调用了
class A():
def __init__(self
,name
):
print("init,我被调用了")
def __call__(self
):
print("call,被调用了")
def __str__(self
):
return "产品是xx"
a
= A
("123")
print(a
)
init,我被调用了
产品是xx
class A():
name
= "NoName"
age
= 18
def __getattr__(self
,name
):
print("运行,getattr")
print(name
)
a
= A
()
print(a
.name
)
print(a
.addr
)
NoName
运行,getattr
addr
None
class Person():
def __init__(self
):
pass
def __setattr__(self
,name
,value
):
print("设置属性:{0}".format(name
))
super().__setattr__
(name
,value
)
p
= Person
()
print(p
.__dict__
)
p
.age
= 18
{}
设置属性:age
class Student():
def __init__(self
,name
):
self
.name
= name
def __gt__(self
, obj
):
print("{0}会比{1}大吗?".format(self
.name
,obj
.name
))
return self
.name
> obj
.name
stu1
= Student
("one")
stu2
= Student
("two")
print(stu1
> stu2
)
one会比two大吗?
False