为什么这个简单的代码不适用于Python 2.7?请帮忙。我最有可能在课堂上误用“新风格”中的super
方法。
class Mechanism(object):
def __init__(self):
print('Init Mechanism')
self.__mechanism = 'this is mechanism'
def get_mechanism(self):
return self.__mechanism
class Vehicle(object):
def __init__(self):
print('Init Vehicle')
self.__vehicle = 'this is vehicle'
def get_vehicle(self):
return self.__vehicle
class Car(Mechanism, Vehicle):
def __init__(self):
super(Car, self).__init__()
c = Car()
print(c.get_mechanism())
print(c.get_vehicle())
错误:
Init Vehicle
Traceback (most recent call last):
File "check_inheritance.py", line 22, in <module>
print(c.get_mechanism())
File "check_inheritance.py", line 7, in get_mechanism
return self.__mechanism
AttributeError: 'Car' object has no attribute '_Mechanism__mechanism'
编辑
def __init(self):
方法。不仅在Mechanism
类。看看def __init__(self):
的答案super
作为私有变量。它不是Python方式(代码样式)。 Car
。你有2个问题:
__
方法;你缺少两个下划线。__init__
方法调用Mechanism
。以下代码有效:
__init__
演示:
super(...).__init__()
您可能也应该不使用双下划线名称。有关详细信息,请参阅__init__
,但简短的原因是您没有此类用于类 - 私有名称的用例,因为您没有构建旨在由第三方扩展的框架;这是这些名字的唯一真正用途。
坚持使用单下划线名称,所以class Mechanism(object):
def __init__(self):
super(Mechanism, self).__init__()
print('Init Mechanism')
self.__mechanism = 'this is mechanism'
def get_mechanism(self):
return self.__mechanism
class Vehicle(object):
def __init__(self):
super(Vehicle, self).__init__()
print('Init Vehicle')
self.__vehicle = 'this is vehicle'
def get_vehicle(self):
return self.__vehicle
class Car(Mechanism, Vehicle):
def __init__(self):
super(Car, self).__init__()
和>>> c = Car()
Init Vehicle
Init Mechanism
>>> print(c.get_mechanism())
this is mechanism
>>> print(c.get_vehicle())
this is vehicle
。