Vor*_*rac 4 python oop class python-2.7
class A:
def __init__(self):
print 'A'
class B(A):
def __init__(self):
print 'B'
b = B()
B
Run Code Online (Sandbox Code Playgroud)
在C++中,我本来希望看到A B输出,但在Python中我只是得到了B.我知道我可以super(B, self).__init__()在Python中实现相同的目标,但是因为这显然不是默认的(或者是它 - 我也是语法的新手),我担心安装对象的范例是完全不同的.
那么Python中的对象是什么,它们与类的关系是什么?在Python中所有父类中初始化所有数据的标准方法是什么?
Python很少自动执行任何操作.如你所说,如果你想调用超类__init__,那么你需要自己做,通常是通过调用super:
class B(A):
def __init__(self):
print 'B'
super(B, self).__init__()
Run Code Online (Sandbox Code Playgroud)
需要注意的是,实例属性与Python中的其他所有属性一样,都是动态的.__init__不是构造函数,这是__new__你很少需要干预的.该对象完全由__init__调用时间构造,但由于实例属性是动态的,它们通常由该方法添加,这只是在创建对象时首先调用它.
您当然可以在任何其他方法中创建实例属性,甚至可以通过简单地执行类似操作从类外部创建实例属性myBobj.foo = 'bar'.
那么Python中的对象是什么
嗯,Python 中的对象就像成员和方法的字典。没有比这更复杂的了。您没有可见性处理(如果您想隐藏某个成员,请不要在公共文档中谈论它,而只需发表评论)。
它们与类的关系是什么
类定义将实例化该字典/对象的方法/成员框架。所以你得到了构造函数__init__(),它只是创建该对象时使用的处理程序。
在Python中初始化所有父类中的所有数据的标准方法是什么?
要么您不重新定义构造函数,然后所有父类都将启动其构造函数(如默认的 C++ 行为),要么您重新定义构造函数,然后必须显式调用父类的构造函数。
记住Python的禅宗:“显式优于隐式”。这完全适用于此。