我的结构是这样的:
def foobar():
print('FOOBAR!')
class SampleClass:
foo = foobar
def printfunc(self):
self.foo()
这不起作用,因为原始的foobar函数无法处理传递给它的self
- 它不是任何类或对象的一部分。 Python也不允许我添加@staticmethod
装饰器。
我无法控制foobar
的定义,我可能必须覆盖子类中foo
的值。
如何在不传递调用它的对象的情况下调用foo?
答案 0 :(得分:6)
Decorators are plain functions,您应该能够在类定义中明确调用staticmethod(foobar)
class SampleClass:
foo = staticmethod(foobar)
def printfunc(self):
self.foo() # Prints 'FOOBAR!'
答案 1 :(得分:2)
来自user2357112评论的方法似乎也有效:
def foobar():
print('FOOBAR!')
def foobaz():
print('FooBAZ!')
class SampleClass:
def foo(self):
foobar()
def printfunc(self):
self.foo()
class DerivedClass(SampleClass):
def foo(self):
foobaz()
sample = SampleClass()
sample.printfunc() # FOOBAR!
derived = DerivedClass()
derived.printfunc() # FooBAZ!
如果返回值通过,则需要在所有级别上return
语句:
def foobar():
print('FOOBAR!')
return 'foo'
def foobaz():
print('FooBAZ!')
return 'baz'
class SampleClass:
def foo(self):
return foobar()
def printfunc(self):
return self.foo()
class DerivedClass(SampleClass):
def foo(self):
return foobaz()
sample = SampleClass()
s = sample.printfunc() # FOOBAR!
print(s) # foo
derived = DerivedClass()
d = derived.printfunc() # FooBAZ!
print(d) # baz