【发布时间】:2021-07-16 00:15:40
【问题描述】:
我有一个 python 类的形式
class MyClass:
def __init__(self, *args, **kwargs):
self.lst = [MyClass.method1]
def method1(self):
pass
def method2(self):
pass
我把这个类扩展成派生类:
class MyDerivedClass(MyClass):
def __init__(self, *args, **kwargs):
self.lst = [MyDerivedClass.method1, MyDerivedClass.method3]
def method3(self):
pass
def method4(self):
pass
列表lst 包含特定的方法选择:在基类中,它应该只包含method1,而在派生类中只包含method1 和method3。我想自动创建lst,而不必覆盖__init__(原因是,在我的情况下,覆盖__init__非常复杂,并且有很多方法)。有没有办法用这样的装饰器做到这一点?
@might_have_to_use_class_decorator?
class MyClass:
def __init__(self, *args, **kwargs):
lst = #automatically compile marked methods -> [method1]
@mark_this_method
def method1(self):
pass
def method2(self):
pass
@might_have_to_use_class_decorator?
class MyDerivedClass(MyClass):
def __init__(self, *args, **kwargs):
lst = # automatically compiled, [method1, method3]
@mark_this_method
def method3(self):
pass
def method4(self):
pass
有没有办法使用装饰器来做到这一点,也许是通过装饰我们的类?
【问题讨论】:
-
只使用类变量?
-
明确一点,
lst只能包含类方法/静态方法,不能包含实例方法?我建议您编辑标题以阐明“类方法”。 -
@smci 可以使用实例方法没有问题,只要手动传入正确的
self参数即可。