我不明白如果我要继承另一种类型--dict,如何将类型从list更改为dict on main class中的构造函数。
这是什么魔法?
class Adder:
def __init__(self, data = [ ]):
self.data = data
def __add__(self, other):
return "Not Implemented"
class DictAdder(Adder):
def __add__(self, y):
z = {}
for k in self.data.keys(): z[k] = self.data[k]
for k in y.keys(): z[k] = y[k]
return z
y = DictAdder({1:'a', 2:'b'})
l = y + { 3: 'c', 4: 'd'}
print(l)
并回答:
{1: 'a', 2: 'b', 3: 'c', 4: 'd'}
Pycharm显示self.data.keys()没有属性键(),这必须是try,因为data是一个列表,但这是工作
答案 0 :(得分:0)
data
默认到列表,但Python不是静态类型语言,所以它不一定是。 data
只是一个名字。仅仅因为我们有这个:
class Adder:
def __init__(self, data = [ ]):
self.data = data
不限制我们的使用。我仍然可以这样做:
i = Adder(4)
s = Adder('hello')
d = Adder({1: 2})
o = Adder(SomeOtherType())
只要使用Adder.data
使用正确的类型就可以使用它。由于在这种情况下,DictAdder
将data
解释为dict
,并且它可以正常工作。当然,如果您尝试使用非DictAdder
构造的dict
,则会出错。