当前位置:网站首页>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'
边栏推荐
- Spherical lens and cylindrical lens
- Introduction to robotframework (III) Baidu search of webui automation
- Sign SSL certificate as Ca
- 华为、H3C、思科命令对比,思维导图形式从基础、交换、路由三大方向介绍【转自微信公众号网络技术联盟站】
- CSP numeric sort
- Introduction to robotframework (II) app startup of appui automation
- [unity3d] GUI control
- 【 kubernets series】 a Literature Study on the Safe exposure Applications of kubernets Service
- 有没有完全自主的国产化数据库技术
- Pat 1046 shortest distance (20 points) simulation
猜你喜欢
My C language learning records (blue bridge) -- files and file input and output
Microsoft speech synthesis assistant v1.3 text to speech tool, real speech AI generator
High number_ Vector algebra_ Unit vector_ Angle between vector and coordinate axis
Communication between microservices
How to accurately identify master data?
Déduisez la question d'aujourd'hui - 729. Mon emploi du temps I
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 15
主数据管理理论与实践
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 13
js 正则过滤和增加富文本中图片前缀
随机推荐
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 22
RobotFramework入门(三)WebUI自动化之百度搜索
A doctor's 22 years in Huawei
主数据管理理论与实践
CSP numeric sort
Master data management theory and Practice
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 24
Follow the mouse's angle and keyboard events
Spherical lens and cylindrical lens
解决:AttributeError: ‘str‘ object has no attribute ‘decode‘
A copy can also produce flowers
Single instance mode of encapsulating PDO with PHP in spare time
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 9
淘宝焦点图布局实战
Bigder: I felt good about the 34/100 interview, but I didn't receive the admission
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 14
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 13
Solution: attributeerror: 'STR' object has no attribute 'decode‘
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 12
Dachang image library