dav*_*ekr 6 python inheritance overriding
有没有办法完成这样的事情?我在Python工作,但我不确定是否有办法在任何编程语言中做到这一点......
class Parent():
class_attribute = "parent"
@staticmethod
def class_method():
print __class__.class_attribute
class Child(Parent):
class_attribute = "child"
Run Code Online (Sandbox Code Playgroud)
我知道我不能__class__直接打电话.它只是一个例子,因为我想要类似于类本身的引用,因为我希望子类基于其class_attribute以不同的方式行动.
然后假定的输出应该是这样的:
> Parent.class_method()
"parent"
> Child.class_method()
"child"
Run Code Online (Sandbox Code Playgroud)
我知道通过实例可以实现相同的技术.但是我不想创建实例,因为有时候__init__方法中的代码可能很长并且要求很高,如果我想class_method经常调用,我将不得不创建大量用于这个方法调用的实例.因为class_attribute它class_method是静态的,不会被实例改变.
呃,听起来你想要一个classmethod,这对classmethod装饰者来说并不奇怪:
class Parent(object):
class_attribute = "parent"
@classmethod
def class_method(cls):
print cls.class_attribute
class Child(Parent):
class_attribute = "child"
>>> Parent.class_method()
parent
>>> Child.class_method()
child
Run Code Online (Sandbox Code Playgroud)
或者,正如bgporter指出的那样,你可以直接使用属性来完成它,而根本不需要这些方法.
| 归档时间: |
|
| 查看次数: |
3263 次 |
| 最近记录: |