Python类属性与实例属性的区别及访问规则详解
本文深入解析Python中类属性与实例属性的核心区别。类属性由所有实例共享,可通过类或实例访问;实例属性仅属于特定对象。重点说明通过实例修改类属性会创建同名实例属性并屏蔽原类属性,而正确修改需通过类对象。
首先结合图示进行理解:

类属性类似于全局变量,为所有实例对象所共有;而实例属性则是各个实例对象私有的数据。
类属性是指类对象(如Tool)所拥有的属性,它被该类所有实例对象的实例方法所共有。在内存中,类属性仅存在一个副本,这与C++中的静态成员变量类似。对于公有的类属性,在类外部既可以通过类对象访问,也可以通过实例对象访问。
类属性
class People(object):
name = 'Tom' #公有的类属性
__age = 12 #私有的类属性
p = People()
print(p.name) #正确
print(People.name) #正确
print(p.__age) #错误,不能在类外通过实例对象访问私有的类属性
print(People.__age) #错误,不能在类外通过类对象访问私有的类属性
实例属性(对象属性)
class People(object):
address = '山东' #类属性
def __init__(self):
self.name = 'xiaowang' #实例属性
self.age = 20 #实例属性
p = People()
p.age =12 #实例属性
print(p.address) #正确
print(p.name) #正确
print(p.age) #正确
print(People.address) #正确
print(People.name) #错误
print(People.age) #错误
通过实例(对象)修改类属性
class People(object):
country = 'china' #类属性
print(People.country)
p = People()
print(p.country)
p.country = 'japan'
print(p.country) #实例属性会屏蔽掉同名的类属性
print(People.country)
del p.country #删除实例属性
print(p.country)

总结
若需在类外部修改类属性,必须通过类对象进行引用和修改。如果尝试通过实例对象引用并修改,将会生成一个同名的实例属性。这种方式修改的仅是实例属性,不会影响原有的类属性。此后,若通过实例对象引用该名称的属性,将强制屏蔽类属性,即实际引用的是新创建的实例属性。除非显式删除该实例属性,否则类属性将被隐藏。
Python:类属性和实例属性总结
#类属性:类对象所拥有的的属性,它被所有类对象的实例对象共有,类对象和实例对象可以访问
#实例属性:实例对象所拥有的属性,只能通过实例对象访问
class Student:
name='李明' #类属性
def __init__(self,age):
self.age=age #实例属性
pass
pass
Student.name='邓超' #通过类对象去修改类属性 因为name属于类属性
print('-----------李明的数据------------------')
lm=Student(18) #实例化对象,并传入参数
print(lm.age) #通过实例对象去访问实例属性
print(lm.name) #通过实例对象去访问类属性
# lm.name='华晨宇' #不能通过实例对象对类属性进行修改
print(lm.name)
print('--------------张三的数据--------------')
zs=Student(20)
print(zs.age)
print(zs.name)
print('------------通过类对象Student去访问name----------------')
print(Student.name)
# print(Student.age) 注:不能通过类对象去访问实例属性
运行结果

以上为个人经验,希望能给大家一个参考,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









