Python类变量和实例变量

Python类变量和实例变量


Demo

class A(object):
    va = 10
    def foo(self):
        print (A.va)  #打印类变量
        print (self.va) #使用self.类变量方式访问类变量
        self.va = 40 #对实例变量赋值 与类变量同名而已
        print(A.va)
        print(self.va)
        va = 20
        print (va)
        A.va = 15
        print (A.va)
        print (self.va)

class Test:
    x=100
    def foo(self):
        print(id(self.x),'  ', self.x,'  ',self)
x=Test()
x.foo()
1782053072    100    <__main__.Test object at 0x0000005B9F4FCDA0>
x1=Test()
x1.foo()
1782053072    100    <__main__.Test object at 0x0000005B9F4F5D30>
id(x),id(x1)
(393514831264, 393514802480)

id(Test.x)
1782053072
Test.x=20000
id(Test.x)
393514577008
x.foo()
393514577008    20000    <__main__.Test object at 0x0000005B9F4FCDA0>
x1.foo()
393514577008    20000    <__main__.Test object at 0x0000005B9F4F5D30>

id(x),id(x1)
(393514831264, 393514802480)

类变量通过sel访问时,就会被转化成实力变量,被绑定到特定的实例上

实例变量分配在栈,类变量分配在堆上,多个实例变量共用类变量


class Test:
    x=100
    def foo(self):
        self.x=200
        print(id(self.x),'  ',id(Test.x), self.x,'  ',self)
x=Test()
x.foo()
1782056272    1782053072 200    <__main__.Test object at 0x0000005B9F4F5C50>

1、类变量可以用 类名.类变量 和 self.类变量 两种方式访问,后者一般情况不建议使用。
2、类变量是所有对象所共享的,无论任何时候都建议用类名的方式访问类变量。
3、实例变量在类内部用 self 访问,在类外部用实例名访问。
4、类变量通过 self 访问时则被转化为实例变量,被绑定到特定的实例上。
5、通过对实例变量(self)的形式对类变量重新赋值后,类变量的值不随之变化。
6、方法内的局部变量会屏蔽掉类变量和实例变量。
7、同一实例变量在不同的实例中可能拥有不同的值

参考

Python 类变量与实例变量
类变量和实例变量

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值