self像其他任何参数一样,在函数或方法的局部变量中。分配给局部变量的裸名永远不会影响该函数或方法之外的任何东西,它只会在本地重新绑定该名称。
正如一条评论正确地表明的那样,目前尚不清楚为什么您不只是这样做
b = a
假设您有充分的理由,那么您需要重写的不是
__init__,而是
__new__((然后采取一些预防措施
__init__以避免双重初始化))。这不是一个显而易见的课程,所以我将等您解释您到底要完成什么。
补充:明确了我与OP的同意后,工厂函数(理想情况下,我建议作为类方法)要好-比清晰
__new__,这会起作用(毕竟这 是 类方法),但要少一些-
清晰明确的方式。
因此,我将编写如下代码:
class A(object): @classmethod def make(cls, value): if isinstance(value, cls): return value return cls(value) def __init__(self, value): self.attribute = value
现在,
a = A.make(1)b = A.make(a)
完成传递给的参数类型,实现了OP的愿望
A.make。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)