我了解C ++和Java,我不熟悉 Pythonic 编程。所以也许这是我想要的风格。
考虑下面的例子:
class foo:
def a():
__class__.b() # gives: this is foo
bar.b() # gives: this is bar
foo.b() # gives: this is foo
# b() I'd like to get "this is bar" automatically
def b():
print("this is foo")
class bar( foo ):
def b( ):
print("this is bar")
bar.a()
注意,我没有使用self
参数,因为我没有尝试创建类的实例,因为不需要我的任务。我只是试图以一种可以覆盖函数的方式引用函数。
答案 0 :(得分:5)
你想要的是a
成为一种类方法。
class Foo(object):
@classmethod
def a(cls):
Foo.b() # gives: this is foo
Bar.b() # gives: this is bar
cls.b() # gives: this is bar
@staticmethod
def b():
print("this is foo")
class Bar(Foo):
@staticmethod
def b():
print("this is bar")
Bar.a()
我已经修改了你的风格以匹配Python coding style。使用4个空格作为缩进。不要在括号之间加上额外的空格。资本化& CamelCase类名。
staticmethod
是一个类上的方法,它不接受任何参数,也不对该类的属性起作用。 classmethod
是类的一种方法,它将类作为属性自动获取。
你继承的使用很好。
答案 1 :(得分:0)
类块中定义的名称范围仅限于该类 块;它没有扩展到方法的代码块 - 这个 包括生成器表达式,因为它们是使用 功能范围。
这意味着函数b
的范围内没有名称a
。您应该通过类或实例对象引用它。