我有两个具有通用__init_subclass__()
方法的类。 __init_subclass__()
检查继承的类是否设置了一些类变量(但是最后这可能是更复杂的代码;我只想举一个例子):
class A():
def __init_subclass__(cls):
# Validate required class variables
required_class_variables = [
"a",
"b",
]
for required_class_variable in required_class_variables:
if not hasattr(cls, required_class_variable):
raise TypeError(
f'Class {cls} lacks `{required_class_variable}` \
class attribute'
)
class B():
def __init_subclass__(cls):
# Validate required class variables
required_class_variables = [
"a",
"b",
]
for required_class_variable in required_class_variables:
if not hasattr(cls, required_class_variable):
raise TypeError(
f'Class {cls} lacks `{required_class_variable}` \
class attribute'
)
当然,A
和B
有更多的方法,为简单起见,我只是省略了它们。我如何在这里避免代码重复?我无法使A
和B
从一个公共基类继承并在那里定义__init_subclass__
,因为这将迫使A
和B
具有required_class_variables,而我想拥有A
和B
的子类来拥有它们。 (即使该基类是Abstract Base Class,也是如此。)
有没有一种方法可以使用__init_subclass__
来实现?还是最后需要使用元类或类装饰器?
答案 0 :(得分:0)
您可以向基类中添加静态方法,并分别在__init_subclass__()
和A
的{{1}}上调用此方法,如下所示:
B