当前位置:网站首页>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'
边栏推荐
- codeforces每日5題(均1700)-第六天
- [Chongqing Guangdong education] higher mathematics I reference materials of Southwest Petroleum University
- Bigder: I felt good about the 34/100 interview, but I didn't receive the admission
- [matlab] access of variables and files
- Rust language -- iterators and closures
- Software design principles
- 【若依(ruoyi)】ztree 自定义图标(iconSkin 属性)
- Microsoft speech synthesis assistant v1.3 text to speech tool, real speech AI generator
- Large scale DDoS attacks take Myanmar offline
- 2022.02.13
猜你喜欢
C language - Blue Bridge Cup - promised score
【 kubernets series】 a Literature Study on the Safe exposure Applications of kubernets Service
XSS challenges绕过防护策略进行 XSS 注入
[matlab] access of variables and files
GifCam v7.0 极简GIF动画录制工具中文单文件版
【Unity3D】GUI控件
Is there a completely independent localization database technology
A doctor's 22 years in Huawei
Yyds dry inventory comparison of several database storage engines
4. File modification
随机推荐
球面透镜与柱面透镜
Redis delete policy
07 单件(Singleton)模式
Yyds dry inventory comparison of several database storage engines
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 14
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 10
Solve 9 with C language × 9 Sudoku (personal test available) (thinking analysis)
解决:AttributeError: ‘str‘ object has no attribute ‘decode‘
Bigder: I felt good about the 34/100 interview, but I didn't receive the admission
Solution: attributeerror: 'STR' object has no attribute 'decode‘
华为、H3C、思科命令对比,思维导图形式从基础、交换、路由三大方向介绍【转自微信公众号网络技术联盟站】
纯Qt版中国象棋:实现双人对战、人机对战及网络对战
How to improve the enthusiasm of consumers when the member points marketing system is operated?
【若依(ruoyi)】ztree 自定义图标(iconSkin 属性)
Apt installation ZABBIX
[Digital IC manual tearing code] Verilog asynchronous reset synchronous release | topic | principle | design | simulation
Trends in DDoS Attacks
codeforces每日5题(均1700)-第六天
Redis installation
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 7