所以我尝试重写__new__,并让它作为一个工厂存在来创建
派生实例。{我在阅读之后,也应该在这个实例下,得到一个印象。在
基础class BaseThing:
def __init(self, name, **kwargs):
self.name = name
# methods to be derived
工厂
^{pr2}$
Aclass A(BaseThing):
def __init__(self, name, **kwargs):
super().__init__(name, **kwargs)
Bclass B(BaseThing):
def __init__(self, name, **kwargs):
super().__init__(name, **kwargs)
我所期待的是它会成功。在>>> a = Thing('A')
给我TypeError: object.__new__(X): X is not a type object (str)
我对此有点困惑;当我只返回派生类的一个具体实例时,它就起作用了。i、 edef __new__(cls, name, **kwargs):
if name == 'A':
return A(name)
if name == 'B':
return B(name)
但是,我认为这不是__new__中返回的正确方法;它可能重复对__init__的调用。在
当我检查__new__中__new__的签名时,似乎是这个:@staticmethod # known case of __new__
def __new__(cls, *more): # known special case of object.__new__
""" Create and return a new object. See help(type) for accurate signature. """
pass
我没想到这是一个;我想它也有args和kwargs。我一定是做错了什么。在
在我看来,我需要直接在基中继承object,但是有人能解释一下正确的方法吗?在