2

我知道 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参数,因为我没有尝试创建类的实例,因为不需要我的任务。我只是想以一种可以覆盖该函数的方式引用一个函数。

4

2 回答 2

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 编码样式。使用 4 个空格作为缩进。不要在括号之间添加额外的空格。大写 & CamelCase 类名。

Astaticmethod是类上的一个方法,它不接受任何参数并且不作用于类的属性。Aclassmethod是类上的一个方法,它自动将类作为属性获取。

您对继承的使用很好。

于 2011-08-09T09:45:42.847 回答
0

引用执行模型

类块中定义的名称范围仅限于类块;它没有扩展到方法的代码块——这包括生成器表达式,因为它们是使用函数范围实现的。

这意味着b在 function 范围内没有名称a。您应该通过类或实例对象引用它。

于 2011-08-09T09:46:27.680 回答