我想知道为什么java构造函数不会被继承?你知道什么时候有这样的课:
public class Super {
public Super(ServiceA serviceA, ServiceB serviceB, ServiceC serviceC){
this.serviceA = serviceA;
//etc
}
}
Run Code Online (Sandbox Code Playgroud)
稍后当你继承时Super,java会抱怨没有定义默认的构造函数.解决方案显然是这样的:
public class Son extends Super{
public Son(ServiceA serviceA, ServiceB serviceB, ServiceC serviceC){
super(serviceA,serviceB,serviceC);
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码是重复的,而不是干的和无用的(恕我直言)...所以这又带来了问题:
为什么java不支持构造函数继承?不允许这种继承有什么好处吗?
为什么Python设计者决定子类的__init__()方法不会__init__()像其他语言那样自动调用超类的方法?Pythonic和推荐的成语是否真的如下?
class Superclass(object):
def __init__(self):
print 'Do something'
class Subclass(Superclass):
def __init__(self):
super(Subclass, self).__init__()
print 'Do something else'
Run Code Online (Sandbox Code Playgroud) 为什么我在Python代码中看不到以下内容?
class A:
def __init__(self, ...):
# something important
class B(A):
__init__ = A.__init__
Run Code Online (Sandbox Code Playgroud)
它似乎在我的盒子上使用Python 2.5,2.6,2.7和PyPy 1.8.
相反,我看到以下内容:
class B(A):
def __init__(self, *args, **kwargs):
A.__init__(self, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
或使用的东西super.
我更喜欢我的第一个例子(明确比隐含更好!)但我担心它不是出于某种原因而变得犹豫不决.这有什么不对吗?
编辑:是的,我的意思是A.__init__,不是self.__init__