在对用python生成泛型类型提出了一些好的想法之后,我开始寻找其他有相同想法的人,但是我找不到任何人。所以,就在这里。我试过了,效果很好。它允许我们在python中参数化类型。class List( type ):
def __new__(type_ref, member_type):
class List(list):
def append(self, member):
if not isinstance(member, member_type):
raise TypeError('Attempted to append a "{0}" to a "{1}" which only takes a "{2}"'.format(
type(member).__name__,
type(self).__name__,
member_type.__name__
))
list.append(self, member)
return List
现在可以从此泛型类型派生类型。class TestMember:
pass
class TestList(List(TestMember)):
def __init__(self):
super().__init__()
test_list = TestList()
test_list.append(TestMember())
test_list.append('test') # This line will raise an exception
这个解决方案很简单,但也有它的局限性。每次创建泛型类型时,它都将创建一个新类型。因此,作为父类继承List( str )的多个类将从两个单独的类继承。为了克服这个问题,您需要创建一个dict来存储内部类的各种形式,并返回先前创建的内部类,而不是创建一个新的内部类。这将防止创建具有相同参数的重复类型。如果感兴趣,可以使用decorators和/或元类来制定更优雅的解决方案。