【发布时间】:2017-03-26 13:50:05
【问题描述】:
我有两节课。一个车辆类和一个汽车类。我的车辆类没有任何属性,所以我可以在没有任何参数的情况下调用它。我的汽车课也一样。汽车类是车辆类的子类。
在我的车辆类中,我有一个变量分配了一个带有一些文本的字符串。我的子类车怎么能继承那个变量呢?
代码:
class Vehicle(object):
def __init__(self):
self.__astring = 'Hello'
def get_string(self):
print self.__astring
class Car(Vehicle):
def __init__(self):
Vehicle.__init__(self)
# Here I need to make a working variable
self.__car_string = self.__astring
self.__car_string2 = ' Again'
self.__big_string = self.__car_string + self.__car_string2
# This method should print 'Hello Agan'
def get_car_string(self):
print self.__big_string
string1 = Vehicle()
string1.get_string() # This prints Hello
string2 = Car()
string2.get_car_string() # This should print Hello Again
当我运行代码时,我得到:
AttributeError: 'Car' object has no attribute '_Car__astring'
我明白为什么,但我不知道如何用字符串继承那个变量。
【问题讨论】:
-
如果希望子类能够访问该属性,为什么用
__double_leading_underscores命名呢?名称修改的全部目的是避免冲突,因此您可以在子项和父项中使用相同的名称。这与是否有__init__参数无关。另外你为什么不使用super? -
我认为隐藏/私有属性是在 Python 中编码的正确方法。所以这使得属性只能从对象方法中访问。所以你说这是问题所在?
-
@nutgut 阅读this。
-
嗯:1. 不,它不是,我们都是在这里同意的成年人,在 Python 中没有什么是真正私有的/受保护的; 2. 如果您确实想按照约定将其设为私有,则为
_single_leading_underscore而不是__double; 3. 是的,这就是问题所在。 -
在编写 Python 时不要担心 public/protected/private。见stackoverflow.com/q/17246867/7432 和stackoverflow.com/q/1641219/7432
标签: python python-2.7