python中实例方法与实例属性-Python之类属性与实例属性

1、类属性与实例属性

类属性就相当与全局变量,实例对象共有的属性,实例对象的属性为实例对象自己私有。

类属性就是类对象(Tool)所拥有的属性,它被所有类对象的实例对象(实例方法)所共有,在内存中只存在一个副本,这个和C++中类的静态成员变量有点类似。对于公有的类属性,在类外可以通过类对象和实例对象访问

2、实例:类属性

class People(object):

name = 'Jack' #类属性(公有)

__age = 12 #类属性(私有)

p = People() #创建实例对象

print(p.name) #通过实例对象,打印类属性:name

print(People.name) #通过类对象,打印类属性:name

print(p.__age) #错误,不能在类外通过实例对象访问私有的类属性

print(People.__age) #错误,不能在类外通过类对象访问私有的类属性

#结果如下:

# Jack

# Jack

# AttributeError: 'People' object has no attribute '__age'

# AttributeError: type object 'People' has no attribute '__age'

3、实例:实例属性(对象属性)

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) # 通过实例对象调用实例属性,并打印

#结果:

# 山东

# xiaowang

# 12

print(People.address) # 通过类对象调用类属性,并打印

print(People.name) # 错误(程序会报错),通过类对象调用实例属性,并打印

print(People.age) # 错误(程序会报错),通过类对象调用实例属性,并打印

#结果:

# 山东

# AttributeError: type object 'People' has no attribute 'name'

# AttributeError: type object 'People' has no attribute 'age'

4、通过实例(对象)去修改类属性

class People(object):

country = 'china' # 类属性

print(People.country) #china

p = People()

print(p.country) #china

p.country = 'japan'

print(p.country) # 实例属性会屏蔽掉同名的类属性:japan

print(People.country) #china

del p.country # 删除实例属性

print(p.country) #实例属性被删除后,再调用同名称的属性,会调用类属性:china

小结:

如果需要在类外修改类属性,必须通过类对象去引用然后进行修改。如果通过实例对象去引用,会产生一个同名的实例属性,这种方式修改的是实例属性,不会影响到类属性,并且之后如果通过实例对象去引用该名称的属性,实例属性会强制屏蔽掉类属性,即引用的是实例属性,除非删除了该实例属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值