Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个Python示例是否仍在初始化一个对象(不带_init__;)_Python_Oop_Python 3.x - Fatal编程技术网

这个Python示例是否仍在初始化一个对象(不带_init__;)

这个Python示例是否仍在初始化一个对象(不带_init__;),python,oop,python-3.x,Python,Oop,Python 3.x,我仍在学习OOP的概念,因此如果这是一个糟糕的问题,请原谅我: 如果在Python中实例化一个对象需要\uuuuuuu init\uuuuu,为什么不调用\uuuuuuuu init\uuuuuu就可以执行以下操作 class Person: #Note the lack of __init__(self): def run(self): print('I am a person') man = Person() man.run() #Prints 'I am

我仍在学习OOP的概念,因此如果这是一个糟糕的问题,请原谅我:

如果在Python中实例化一个对象需要
\uuuuuuu init\uuuuu
,为什么不调用
\uuuuuuuu init\uuuuuu
就可以执行以下操作

class Person:
    #Note the lack of __init__(self):
    def run(self):
        print('I am a person')

man = Person()
man.run() #Prints 'I am a person')

\uuuu init\uuuuu
是一个构造函数,这是一个在创建对象时调用的函数。它通常用于设置对象,使其可以使用。如果不存在
\uuuu init\uuuu
,则仍将创建对象。它只是意味着对象在构造时不会完成任何操作。

如果不需要执行父类提供的初始化以外的任何初始化,则无需创建
\uuuu init\uuuuu
函数。请注意,任何父类的函数都会被自动调用:

In [1]: class Parent(object):
   ...:     def __init__(self):
   ...:         print 'Inside __init__ of parent'

In [2]: class Person(Parent):
   ...:     def run(self):
   ...:         print 'I am a person'

In [3]: p = Person()
Inside __init__ of parent

In [4]: p.run()
I am a person
在现代Python中,任何类都隐式地派生自
对象
类,该类负责分配内存空间等基本事务,即使您不添加任何其他属性。

来自:

实例化操作(“调用”类对象)创建 空对象。许多类喜欢使用实例创建对象 自定义到特定的初始状态。因此,类可以定义 名为init()的特殊方法,如下所示


因此不需要
\uuuuu init\uuuuuu
,它是python提供的机制,允许您在初始化对象时设置其初始状态。

谢谢。我不知道我怎么会错过这个。顺便说一句,你是否阅读了整个教程,如果是的话,你会推荐它(而不是我现在正在阅读的Python书籍)@Startec我个人认为阅读整个教程可能有点让人不知所措(我自己没有读过)但是我建议你把它作为一本参考书,来寻找你感兴趣或需要使用的语言的具体部分:并发编程,数据结构。。。在使用python很长一段时间后,您会发现自己已经完全阅读了它。不过,这只是我的意见。谢谢,我从来没有得到过任何人的意见,我正在考虑直接阅读。@Startec对我来说是必须的。我已经读过了,现在我要读第二个标题,从技术上讲,Python使用了两个阶段的初始化方案,因此没有合适的“构造函数”——有一个分配器(
\uuuuuu new\uuu
)和一个初始化器(
\uuu init\uuu
)。初始化器只有在存在的情况下才会被调用,因此有可能让分配器完成所有的初始化工作,而根本没有初始化器(对于不可变类型IIRC来说是FWIW)。@brunodesthuilliers仍然,python数据引用调用
\u init\u
函数作为构造函数()。我所知道的所有OOP语言都允许构造函数“接触”对象的内部成员,这意味着对象的分配已经完成。我不认为这是python的特例。