python3重写new方法_正确重写python3中的\uuu new_u

所以我尝试重写__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,但是有人能解释一下正确的方法吗?在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值