我有两个具有通用__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
拥有它们。(即使该基类是抽象基类也是如此。)
有没有办法做到这一点__init_subclass__
?或者我最终需要使用元类或类装饰器吗?