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!