类与实例属性

本文介绍了Python中类属性的概念,它们由类的所有实例共享。类属性可以通过实例或类名访问,但修改时需通过ClassName.AttributeName方式。此外,文章讨论了静态方法和类方法的使用,以及它们在继承中的不同行为。类方法允许通过类名或实例名调用,而静态方法不绑定到实例。最后,通过示例展示了如何在继承中合理使用类方法。
摘要由CSDN通过智能技术生成

实例属性归类的特定实例所有。也就是说,对于两个不同的实例,实例属性通常是不同的。您现在应该熟悉我们在前一章中介绍的这个概念。

我们还可以在类级别定义属性。类属性是类本身拥有的属性。它们将由类的所有实例共享。因此,它们对每个实例都具有相同的值。我们在所有方法之外定义类属性,通常它们位于顶部,类标题的正下方。

在下面的交互式 Python 会话中,我们可以看到所有实例的类属性“a”都是相同的,在我们的示例“x”和“y”中。除此之外,我们看到我们可以通过实例或通过类名访问类属性:

 A:
    a  =  “我是一个类属性!” 
x  =  A () 
y  =  A () 
x 一个

输出:

“我是阶级属性!”
y 一个

输出:

“我是阶级属性!”
一个一个

输出:

“我是阶级属性!”

但要小心,如果你想改变一个类的属性,你必须用 ClassName.AttributeName 表示法来做。否则,您将创建一个新的实例变量。我们在以下示例中演示了这一点:

 A:
    a  =  “我是一个类属性!” 
x  =  A () 
y  =  A () 
x a  =  "这会为 x 创建一个新的实例属性!"
y 一个

输出:

“我是阶级属性!”
一个一个

输出:

“我是阶级属性!”
一个a  =  "这正在改变类属性 'a'!"
一个一个

输出:

“这正在改变类属性'a'!”
y 一个

输出:

“这正在改变类属性'a'!”
× a 
# 但 xa 仍然是之前创建的实例变量

输出:

'这为 x 创建了一个新的实例属性!'

Python 的类属性和对象属性存储在不同的字典中,我们可以在这里看到:

× __dict__

输出:

{'a': '这会为 x 创建一个新的实例属性!'}
 y __dict__

输出:

{}
一个__dict__

输出:

mappingproxy({'__module__': '__main__',
              'a': "这正在改变类属性 'a'!",
              '__dict__': <属性 '__dict__' of 'A' 对象>,
              '__weakref__': <属性 '__weakref__' of 'A
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值