我正在处理初始化类的问题。下面是一个复制的例子,突出了潜在的问题(我没有设法使它小得多):
课程
我们有两个类A,B。等级制度A:第一类实例有两个属性link;name
^{cd2>的一个属性是这个类的。在
为了更快地声明B的实例,我考虑了以下几点:B(name=name)帘幕后面的B(a=A(name=name))。在
这是密码class A(object):
def __init__(self, link='', name=''):
self.name = name
self.link = link
class B(object):
def __init__(self, a=A(), value=0, link='', name=''):
# Two ways to initialize "self.a":
# 1. If "name" or "link" provided
# 2. With "a" provided
if {name, link}.difference({''}):
self.a = A(name=name, link=link)
else:
self.a = a
# Rest
self.value = value
def __str__(self):
return 'Instance:\nname:\t{}\nlink:\t{}\nvalue:\t{}'.format(self.a.name, self.a.link, self.value)
测试
这里有两个小测试:{{10>使用第一个实例来定义第二个方法将实例定义为空(B()),然后继续填充/覆盖字段。在
正如下面可以看到的,第二个选项是有问题的,因为它覆盖了类的默认值。在
^{pr2}$
我怎么能保证这个问题不会发生?我应该重写__new__方法,添加getters/setter,使用副本(copy.deepcopy)等吗?在