python类属性和实例属性同名_python:当类属性、实例属性和方法都有相同的名称时会发生什么?...

类属性可通过类访问:YourClass.clsattribute

或者通过实例(如果实例没有覆盖类属性):instance.clsattribute

如果通过实例访问方法,则实例作为self参数传递给描述符。

如果要从类中调用方法,则必须显式传递实例作为第一个参数。所以这些是等价的:instance.method()

MyClass.method(instance)

对实例属性和方法使用相同的名称将使该方法通过实例隐藏,但该方法仍然可以通过类使用:#python3

>>> class C:

... def __init__(self):

... self.a = 1

... def a(self):

... print('hello')

...

>>> C.a

>>> instance = C()

>>> instance.a

1

>>> C.a(instance)

hello

结论:实例属性和方法的名称不能相同。

我用有意义的名字来避免这个问题。方法是动作,所以我通常用动词或句子来表示。属性是数据,因此我对它们使用名词/形容词,这避免了对方法和属性使用相同的名称。

请注意,不能使用与方法同名的类属性,因为该方法将完全重写它(最后,方法只是可调用的类属性,并且会自动将类的实例作为第一个属性接收)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值