当前位置:网站首页>Data and Introspection__ dict__ Attributes and__ slots__ attribute
Data and Introspection__ dict__ Attributes and__ slots__ attribute
2022-07-06 02:51:00 【chuntian_ tester】
Variables defined in a class are called class attributes , Methods defined in a class are called class methods ; Class attribute classification :
1. Public attribute : General attribute
2. Private property : With “_” or "__" The first attribute is called a private attribute , Private properties can also be inherited and accessed .
for example :
class Info(object):
_name = ' Springfield '
__age = 4
if __name__ == '__main__':
i = Info()
print(i._name) # Output : Springfield
print(Info._name) # Output : Springfield
print(Info._Info__age) # Output :4
print(i.__age) # Output :AttributeError: 'Info' object has no attribute '__age'
print(Info.__age) # Output :AttributeError: 'Info' object has no attribute '__age'
_name attribute : Outside through “Info._name" or “ object ._name" visit .
__age attribute : External access only “Info._Info__age" visit .
3.__dict__ Method :
3.1 Class calls the class itself __dict__ attribute , What is returned is the dictionary of the properties and methods of a class .
3.2 The instance object calls the... Of the object itself __dict__ attribute , What is returned is a dictionary of the properties and methods of an instance object .
class Info(object):
_name = ' Springfield '
__age = 4
def run(self):
print('run')
if __name__ == '__main__':
i = Info()
i.gender = 'male'
# Call the object's __dict__ Method :{'gender': 'male'}
print(i.__dict__)
# The calling class __dict__ Method :
# {'__module__': '__main__', '_name': ' Springfield ', '_Info__age': 4,
# 'run': <function Info.run at 0x7f84a00a0d30>,
# '__dict__': <attribute '__dict__' of 'Info' objects>,
# '__weakref__': <attribute '__weakref__' of 'Info' objects>, '__doc__': None}
print(Info.__dict__)
It can be seen that : When the class is created ,Python Will automatically add {'__dict__': <attribute '__dict__' of 'Info' objects>, '__weakref__': <attribute '__weakref__' of 'Info' objects>, '__doc__': None} These attributes , But we don't need these attributes , If this class is instantiated with many objects , Then a lot of memory space will be wasted to store these attributes we don't need , Increased performance overhead . How to solve ?
Through built-in properties :__slots__ To limit the properties that a class can be defined , Solve the problem that the class is automatically added with attributes .
__slots__ attribute :slots Properties cannot be inherited
1. Specify the properties that class objects can bind ;
2. Limiting attributes ;
3. To save memory : Defined __slots__ After attribute , Then the object will not be generated automatically __dict__ attribute .
By defining... In a class __slots__ Property to override the default __dict__ Behavior ;__slots__ Declare to receive a sequence of instance variables , And only enough space is reserved for each variable value in each instance , Therefore, it will not be created for each instance __dict__, So save space .
class Test(object):
# adopt __slots__ Restrict the attributes that a class can exist ,slots Properties cannot be inherited
__slots__ = ['name', 'age']
def __init__(self, name, age, gender):
self.name = name
self.age = age
# self.gender = gender # __slots__ This is not included in gender attribute , So there's an error
class Case(object):
# The test platform creates test cases
__slots__ = ['case_id', "title", "url", "data", "expected"]
def __init__(self):
self.case_id = None
self.title = None
self.url = None
self.data = None
self.expected = None
if __name__ == '__main__':
t = Test(' Springfield ', "4", 'male')
# View the of the class __dict__ Method , The properties and methods of the discovery class are no longer in __dict__ Content. .
print(Test.__dict__) # {'__module__': '__main__', '__slots__': ['name', 'age'], '__init__': <function Test.__init__ at 0x7f81200a0d30>, 'age': <member 'age' of 'Test' objects>, 'name': <member 'name' of 'Test' objects>, '__doc__': None}
print(t.__dict__) # AttributeError: 'Test' object has no attribute '__dict__'
print(t.age)
print(t.name)
print(t.gender)
# Output :AttributeError: 'Test' object has no attribute 'gender'
边栏推荐
- [network security interview question] - how to penetrate the test file directory through
- MySQL winter vacation self-study 2022 11 (8)
- XSS challenges绕过防护策略进行 XSS 注入
- 主数据管理(MDM)的成熟度
- Referenceerror: primordials is not defined error resolution
- Deeply analyze the chain 2+1 mode, and subvert the traditional thinking of selling goods?
- Rust language -- iterators and closures
- [ruoyi] enable Mini navigation bar
- [Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 10
- Misc (eternal night), the preliminary competition of the innovation practice competition of the National College Students' information security competition
猜你喜欢
建模规范:命名规范
High number_ Vector algebra_ Unit vector_ Angle between vector and coordinate axis
[Yu Yue education] basic reference materials of digital electronic technology of Xi'an University of Technology
Misc (eternal night), the preliminary competition of the innovation practice competition of the National College Students' information security competition
深度解析链动2+1模式,颠覆传统卖货思维?
Apt installation ZABBIX
Sign SSL certificate as Ca
"Hands on learning in depth" Chapter 2 - preparatory knowledge_ 2.5 automatic differentiation_ Learning thinking and exercise answers
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 6
Apt installation ZABBIX
随机推荐
Codeworks 5 questions per day (1700 average) - day 6
力扣今日题-729. 我的日程安排表 I
Apt installation ZABBIX
How to read excel, PDF and JSON files in R language?
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 14
Qt发布exe软件及修改exe应用程序图标
Technology sharing | what if Undo is too big
2345文件粉碎,文件强力删除工具无捆绑纯净提取版
4. File modification
淘宝焦点图布局实战
A copy can also produce flowers
Shell script updates stored procedure to database
MySQL winter vacation self-study 2022 11 (7)
Differences and usage scenarios between TCP and UDP
Prototype design
How to improve the enthusiasm of consumers when the member points marketing system is operated?
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 20
QT release exe software and modify exe application icon
Atcoder beginer contest 233 (a~d) solution
"Hands on learning in depth" Chapter 2 - preparatory knowledge_ 2.5 automatic differentiation_ Learning thinking and exercise answers