Python:无法从dict调用类

时间:2019-08-06 09:51:05

标签: python class dictionary init

我是面向对象编程的新手,当我碰壁时,我正在使用字典中的类来玩Python。

我创建了父类和子类,并将子类插入另一个类dictionary的dict中:

class zero(object):
    def __init__(self):
        print('This is some text')


class one(zero):
    def execute(self):
        print(0+1)


class two(zero):
    def execute(self):
        print(0+2)


class three(zero):
    def execute(self):
        print(0+3)


class dictionary(object):   
    numbers = {
        1: one(),
        2: two(),
        3: three()
    }

dictionary.numbers[3].execute()

当我这样做时,程序立即打印子类的__init__,然后继续在最后一行执行命令。

我不确定为什么会这样,因为我只希望最后一行能产生输出。我在做什么错了?

2 个答案:

答案 0 :(得分:0)

没事。在这里:

{
        1: one(),
        2: two(),
        3: three()
}

()实际上是调用one.__init__()(在使用one.__new__()创建对象之后)。这是对所有三个对象完成的。

无论如何,每当使用SomeClass(some, arguments)实例化一个类的实例时,都在调用该类的__init__方法。

答案 1 :(得分:0)

类的__init__方法称为“构造函数”,当从该类创建对象时执行该方法(例如,创建对象时经常会看到传递给该类的变量,并且__init__方法将用于接受变量,并使用其值填充内部类变量。

onetwothree都是类zero的所有子类(或继承)-您可以看到所有三个类定义都包含一个引用到定义类名的行中的zero,例如def one(zero):,因此它们都自动从__init__类继承zero方法。

因此,当您将one()类中的数字two()分配给three()dictdictionary时,它们实际上都是在执行构造函数__init__中的zero方法,其中包含要打印文本的语句,然后在{{1}中以数字execute显式调用第三个元素的dict方法}}。