Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中引用重写的类函数 我知道C++和java,我对Pythonic编程不熟悉。所以,也许这是我试图做的不好的风格_Python_Oop_Inheritance_Class Method_Static Functions - Fatal编程技术网

如何在python中引用重写的类函数 我知道C++和java,我对Pythonic编程不熟悉。所以,也许这是我试图做的不好的风格

如何在python中引用重写的类函数 我知道C++和java,我对Pythonic编程不熟悉。所以,也许这是我试图做的不好的风格,python,oop,inheritance,class-method,static-functions,Python,Oop,Inheritance,Class Method,Static Functions,以休闲为例: foo类: 定义a(): __类_uu.b()给出:这是foo 这是酒吧 foo.b()#gives:这是foo #我想自动得到“这是酒吧” def b(): 打印(“这是foo”) 分类栏(foo): def b(): 打印(“这是酒吧”) 律师公会() 请注意,我没有使用self参数,因为我没有尝试创建类的实例,因为不需要我的任务。我只是试图以一种可以重写函数的方式引用函数。您想要的是a成为classmethod class Foo(object): @classme

以休闲为例:

foo类:
定义a():
__类_uu.b()给出:这是foo
这是酒吧
foo.b()#gives:这是foo
#我想自动得到“这是酒吧”
def b():
打印(“这是foo”)
分类栏(foo):
def b():
打印(“这是酒吧”)
律师公会()

请注意,我没有使用
self
参数,因为我没有尝试创建类的实例,因为不需要我的任务。我只是试图以一种可以重写函数的方式引用函数。

您想要的是
a
成为classmethod

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()
我已编辑了您的样式以匹配当前的样式。使用4个空格作为缩进。不要在括号之间加空格。大写&CamelCase类名称

staticmethod
是类上的一种方法,它不接受任何参数,也不作用于类的属性。
classmethod
是类上的一种方法,它自动将类作为属性获取

您对继承的使用很好。

引自:

类块中定义的名称的范围仅限于类 块它不扩展到方法的代码块–这是 包含生成器表达式,因为它们是使用 功能范围


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

他不知道如何在仍然允许重写它的情况下这样做-这是他的问题。@agf我相信他想知道为什么会发生这种情况。谢谢!你的回答还有一些我不知道该问的信息。现在我知道了,它还提供了一些关于这些装饰器的有用信息。我建议你也在文档的内置函数页面上阅读它们,