Python:从字典调用 类 时遇到问题

Python: Having trouble calling classes from dicts

我是面向对象编程的新手,当我 运行 撞墙时,我正在 Python 使用字典中的 classes 玩耍。

我创建了父子 classes,并将子 classes 插入到另一个 class 的字典中 dictionary:

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()

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

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

没什么问题。这里:

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

() 字面上调用,例如,one.__init__()(在使用 one.__new__() 创建对象之后)。这对所有三个对象都完成了。

无论如何,无论何时使用 SomeClass(some, arguments) 实例化 class' 实例,您都在调用 class' __init__ 方法。

class 的 __init__ 方法称为 'constructor' 并在从 class 创建对象时执行(例如,您经常会查看创建对象时传递给 class 的变量,__init__ 方法将用于接受变量并用它们的值填充内部 class 变量。

classes onetwothree 都是 class(或继承)自 class zero -- 您可以看到所有三个 class 定义都在定义 class 名称的行中包含对 zero 的引用,例如 def one(zero): -- 所以它们全部自动从 zero class.

继承 __init__ 方法

因此,当您将 one()two()three() 分配给 dictionary class 中的数字 dict 时,它们本质上都是从 zero 执行构造函数 __init__ 方法,其中包含打印文本的语句,然后显式调用数字 [=23] 中第三个元素的 execute 方法=] 在 dictionary.