我是面向对象编程的新手,当我碰壁时,我正在使用字典中的类来玩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__,然后继续在最后一行执行命令。
我不确定为什么会这样,因为我只希望最后一行能产生输出。我在做什么错了?
答案 0 :(得分:0)
没事。在这里:
{
1: one(),
2: two(),
3: three()
}
()
实际上是调用one.__init__()
(在使用one.__new__()
创建对象之后)。这是对所有三个对象完成的。
无论如何,每当使用SomeClass(some, arguments)
实例化一个类的实例时,都在调用该类的__init__
方法。
答案 1 :(得分:0)
类的__init__
方法称为“构造函数”,当从该类创建对象时执行该方法(例如,创建对象时经常会看到传递给该类的变量,并且__init__
方法将用于接受变量,并使用其值填充内部类变量。
类one
,two
和three
都是类zero
的所有子类(或继承)-您可以看到所有三个类定义都包含一个引用到定义类名的行中的zero
,例如def one(zero):
,因此它们都自动从__init__
类继承zero
方法。
因此,当您将one()
类中的数字two()
分配给three()
,dict
和dictionary
时,它们实际上都是在执行构造函数__init__
中的zero
方法,其中包含要打印文本的语句,然后在{{1}中以数字execute
显式调用第三个元素的dict
方法}}。