Related free learning recommendations: python video tutorial
- ## __getattr__ is the getattr magic function that is called when the class calls an attribute that does not exist. The value item it passes in is the non-existent value you are calling.
class User(object):
def __init__(self, name, info):
self.name = name
self.info = info
ls = User("李四",{"gender":"male"})print(ls.info)运行结果:{'gender': 'male'}
If you want to get the male attribute, you need to use the
__getattr__ magic method.
class User(object):
def __init__(self, name, info):
self.name = name
self.info = info def __getattr__(self, item):
return self.info[item]ls = User("李四",{"gender":"male"})print(ls.gender)运行结果:
male
Attribute descriptor is a powerful general protocol. It is the calling principle of properties, methods, static methods, class methods- and super().
Attribute descriptor is a class that implements a specific protocol. As long as any one of the three methods __get__, __set__ and __delete__ is implemented, this class is a descriptor, which can implement multiple attributes. One way to use the same access logic is to create an instance as a class attribute of another class. - If an object defines both __get__ and __set__ methods, it is called a data descriptor.
- Objects that only define the __get__ method are called non-data descriptors.
Use class methods to create descriptors • Define an IntField class as a descriptor class • Create an instance of the IntField class as an attribute of another User class -
class User:
def __init__(self, age):
self.age = age def get_age(self):
return (str(self.age) + '岁')
def set_age(self, age):
if not isinstance(age, int):
raise TypeError('Type Error')
self.age = age
tt=User(55)tt.set_age(60)print(tt.get_age())运行结果:60岁
Descriptor Search order • When it is a data descriptor, - get__ has a higher priority than __dict • When it is a non-data descriptor,
dict__ has a higher priority than __get
For more programming-related knowledge, please visit:
Programming Teaching! !
The above is the detailed content of Describe Python class properties. For more information, please follow other related articles on the PHP Chinese website!