改变超类的类型

时间:2014-11-22 21:11:37

标签: python inheritance

我不明白如果我要继承另一种类型--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是一个列表,但这是工作

1 个答案:

答案 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使用正确的类型就可以使用它。由于在这种情况下,DictAdderdata解释为dict,并且它可以正常工作。当然,如果您尝试使用非DictAdder构造的dict,则会出错。