class Base:
def method(self):
print("Base method called")
class Derived(Base):
def method(self):
print("Derived method called")
我想找到一种方法让派生方法自动调用基本方法实现,或者更好的是,在调用派生方法之前强制调用基本方法。
例如:
derived = Derived()
derived.method()
所需输出:
Base method called
Derived method called
我想避免在派生方法中显式调用基方法。我尝试搞乱
__init_subclass__
黑客:
class Base:
def __init_sublcass__(cls, *args, **kwargs):
def wrapper(self):
super().method()
self.method()
cls.method = wrapper
def method(self):
print("Base method called")
它可以工作,但 pylance 有问题,而且它并不理想或易于理解。
method()
始终使用元类调用
Base.method()
。像这样的东西怎么样:
class Base_Meta(type):
def __init__(cls, name, bases, dct):
def method_new(self):
Base.method(self)
cls.method_old(self)
if cls.__name__ != "Base":
cls.method_old = cls.method
cls.method = method_new
class Base(metaclass=Base_Meta):
def method(self):
print("Base method called")
class Derived(Base):
def method(self):
print("Derived method called")
d = Derived()
d.method()
我想这会给你:
Base method called
Derived method called
def callBaseMethod(f):
def wrapper(*args, **kwargs):
self, *rest = args
base = getattr(super(self.__class__, self), f.__name__)
base(*rest, **kwargs)
f(*args, **kwargs)
return wrapper
class Base:
def method(self):
print("Base method called")
class Derived(Base):
@callBaseMethod
def method(self):
print("Derived method called")
def main():
derived = Derived()
derived.method()
按要求输出