【Python基础】Python面向对象 - 9 - 类属性,实例属性

本文深入探讨了Python中实例属性和类属性的区别与联系,包括如何设置、访问和修改这些属性,以及它们在内存中的表现形式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实例属性

实例仅拥有数据属性,它是与某个类的实例相关联的数据值,这些值独立于其他实例或类。当一个实例被释放后,它的属性同时也被清除了。

设置实例的属性可以在实例创建后任意时间进行,也可以在能够访问实例的代码中进行。构造器 __init__() 是设置这些属性的关键点之一。

内建函数 dir() 可以显示类属性,同样还可以打印所有实例属性:

>>> class C():  
...     pass  
...  
>>> c = C()  
>>> c.foo = 'roger'  
>>> c.bar = 'shrubber'  
>>> dir(c)  
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__form  
at__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__',  
 '__lt__', '__module__', '__ne__', '__new__', '__qualname__', '__reduce__', '__r  
educe_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook  
__', '__weakref__', 'bar', 'foo'] 

实例也有一个 __dict__特殊属性,它是实例属性构成的一个字段:

>>> c.__dict__  
{'foo': 'roger', 'bar': 'shrubber'}  

特殊的实例属性:

I.__class__实例化I的类
I.__dict__I 的属性

类属性

类属性仅与其被定义的类相绑定。类数据属性仅当需要有更加“静态”数据类型时才变得有用,它和任何实例都无关。

>>> class C(object):  
...     foo = 100  
...  
>>> print(C.foo)  
100  
>>> C.foo = C.foo + 1  
>>> print(C.foo)  
101 

要知道一个类有哪些属性,有两种方法。最简单的是使用 dir() 内建函数。另外是通过访问类的字典属性 __dict__。

>>> dir(MyClass)  
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__form  
at__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__',  
 '__lt__', '__module__', '__ne__', '__new__', '__qualname__', '__reduce__', '__r  
educe_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook  
__', '__weakref__', 'myVersion', 'showMyVersion']  
>>> MyClass.__dict__  
mappingproxy({'__module__': '__main__', '__qualname__': 'MyClass', '__weakref__'  
: <attribute '__weakref__' of 'MyClass' objects>, 'showMyVersion': <function MyC  
lass.showMyVersion at 0x01D98F18>, '__dict__': <attribute '__dict__' of 'MyClass  
' objects>, 'myVersion': '1.1', '__doc__': 'MyClass class definition'}) 

dir() 返回的仅是对象的属性的一个名字类表,而 __dict__ 返回的是一个字典,它的键(key)是属性名,键值(value)是相应的属性对象的数据值。 


特殊的类属性:

C.__name__类C的名字(字符串)
C.__doc__        类C的文档字符串
C.__bases__        类C的所有父类构成的元组
C.__dict__        类C的属性
C.__module__        类C定义所在的模块
C.__class__        实例C对应的类

>>> MyClass.__name__  
'MyClass'  
>>> MyClass.__doc__  
'MyClass class definition'  
>>> MyClass.__bases__  
(<class 'object'>,)  
>>> print(MyClass.__dict__)  
{'__module__': '__main__', '__qualname__': 'MyClass', '__weakref__': <attribute  
'__weakref__' of 'MyClass' objects>, 'showMyVersion': <function MyClass.showMyVe  
rsion at 0x01D98F18>, '__dict__': <attribute '__dict__' of 'MyClass' objects>, '  
myVersion': '1.1', '__doc__': 'MyClass class definition'} 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值