Python类属性和实例属性

Python的类属性和实例属性

  实例属性又称为对象属性。
  简而言之,类属性是类的属性,实例属性是实例的属性。类属性通过类名调用,实例属性通过self/实例对象调用。

测试代码1

# object 是 Python中的根类、最底层的类,基本上所有的类都要继承于object类
class People(object):
    # 类属性
    age = '123'

    def __init__(self, u_name):
        self.u_name = u_name

    def print_student(self):
        print(self.u_name, "实例属性的值:" + str(self.age))
        print("类属性的值:" + str(People.age))

    # 这里使用self.age实际上是绑定了一个实例属性age
    def update_instance_age(self, age):
        self.age = age

    # 如何正确修改类属性age
    @classmethod
    def update_class_age(self, age):
        People.age = age


# 1、类调用@classmethod装饰的方法,修改类属性age
# People.age = age
People.update_class_age(120)
print(People.age)

print("------------创建两个对象 p1 p2--------------")
p1 = People('张三')
p2 = People('李四')

# 2、通过实例对象绑定实例属性/通过调用类封装的方法绑定实例属性
# 这里的print_student()输出的是self.age,如果有同名实例属性,则调用的是同名的实例属性,否则是类属性
print("1、通过实例对象绑定:")
p1.age = 90
p1.print_student()
print("2、通过self绑定:")
p1.update_instance_age(80)
p1.print_student()


# 3、People类修改类属性age。输出p1和p2的age值,p1使用的是实例属性age/p2使用的是类属性age
print('------使用People修改name之后-------')
People.age = 88
p1.print_student()
p2.print_student()

测试代码2
  下面的代码,对于我理解类属性和实例属性的区别又有了进一步的催化作用。记住以下两个结论,我觉得大概就能分清类属性和实例属性的区别了。
  1、初始时如果只有类属性,self调用同名属性的时候,第一次使用时创建一个与类属性同名的实例属性,且初始值是类属性的值。
  2、第二次之后的运算都与类属性无关(因为第一次已经创建了一个实例属性,使用的是当前的实例属性)

# 测试类属性和实例属性
class People(object):
    # 类属性count
    count = 0

    def eat(self):
        # 初始时如果只有类属性,self调用同名属性的时候,第一次使用时创建一个与类属性同名的实例属性,且初始值是类属性的值。
        # self第二次之后的调用都与类属性无关(因为第一次已经创建了一个实例属性,使用的是当前的实例属性)
        People.count += 5
        self.count += 8
        print(People.count, self.count)


p = People()
p.eat()
p.eat()

"""
运行结果:
>>> 5 13
>>> 10 21
"""
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值