python子类与父类属性重名_python – 从子类体访问父类属性

你不行

Python中的类定义工作如下。

>解释器看到一个类语句后跟一个代码块。

>它创建一个新的命名空间,并在命名空间中执行该代码。

>它使用生成的命名空间,类名,基类和元类(如果适用)调用类型内置函数。

>它将结果分配给类的名称。

在类定义中运行代码时,您不知道基类是什么,因此您无法获取属性。

你可以做的是在定义它之后立即修改类。

编辑:这是一个可以用来更新属性的小类装饰器。这个想法是你给它一个名字和一个功能。它查看你的类的所有基类,并使用该名称获取属性。然后它使用继承自基类的值列表和您在子类中定义的值来调用该函数。此呼叫的结果被绑定到该名称。

代码可能更有意义:

>>> def inherit_attribute(name, f):

... def decorator(cls):

... old_value = getattr(cls, name)

... new_value = f([getattr(base, name) for base in cls.__bases__], old_value)

... setattr(cls, name, new_value)

... return cls

... return decorator

...

>>> def update_x(base_values, my_value):

... return sum(base_values + [my_value], tuple())

...

>>> class Foo: x = (1,)

...

>>> @inherit_attribute('x', update_x)

... class Bar(Foo): x = (2,)

...

>>> Bar.x

(1, 2)

这个想法是您将Bar定义为(2,)。然后,装饰器将通过Bar的子类来查找所有的xs,并与它们一起调用update_x。所以会打电话

update_x([(1,)], (2,))

它通过连接它们组合它们,然后再次绑定到x。那有意义吗?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值