如何在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我相信他想知道为什么会发生这种情况。谢谢!你的回答还有一些我不知道该问的信息。现在我知道了,它还提供了一些关于这些装饰器的有用信息。我建议你也在文档的内置函数页面上阅读它们,