python__getattr__等方法

python__getattr__等方法

   张吉吉     2021年3月4日 09:39     1173    

1.__getattr__方法

class People(object):
   
def __init__(self, name):
       
self.name = name

   
def introduce(self):
       
print("my name is " + self.name)

   
def __getattr__(self, item):
       
return "No "+ item + " attribute"

A = People("A")
A.introduce()
print(A.age)
print(A.height)


运行结果:

my name is A

No age attribute

No height attribute

当去调用对象中没有的属性的时候,就会自动去调用__getattr__方法。去例子中可以看到,当调用A.ageA.height时,就会提示没有这两个属性。

而如果在代码中不写明__getattr__方法,在调用不存在变量的时候,就会抛出异常。

 

2.__setattr__方法

class People(object):
   
def __init__(self, name):
       
self.name = name

   
def introduce(self):
        
print("my name is " + self.name)

   
def __setattr__(self, key, value):
       
print(key , value)
       
print("into __setattr__")
       
if value == 25:
           
print("from __init__")
       
object.__setattr__(self, key, value)

A = People(
"A")
A.age =
25
A.introduce()


name A

into __setattr__

age 25

into __setattr__

from __init__

my name is A

可以看到每次在设置属性的时候都会去调用__setattr__方法。

 

3.__delattr__方法

class People(object):
   
def __init__(self, name ):
       
self.name = name

   
def introduce(self):
       
print("my name is " + self.name)

   
def __delattr__(self, item):
       
print("__delattr__")
       
object.__delattr__(self,item)

   
def __getattr__(self, item):
       
return "No " + item + " attribute"

A = People("A")
del A.name
print(A.name)


在执行del的时候回调用__delattr__方法


文章评论

0

其他文章