Python 不带参数的父类继承

Python 不带参数的父类继承,python,python-2.7,Python,Python 2.7,我有两节课。车辆等级和汽车等级。我的vehicle类没有任何属性,因此我可以在没有任何参数的情况下调用它。我的汽车课也一样。car类是车辆类的子类 在我的vehicle类中,我给一个变量分配了一个字符串和一些文本。我的子类如何继承该变量 代码: 当我运行代码时,我得到: AttributeError: 'Car' object has no attribute '_Car__astring' 我确实理解为什么,但我不知道如何用字符串继承该变量。将属性标记为private(这意味着它不应该直接在

我有两节课。车辆等级和汽车等级。我的vehicle类没有任何属性,因此我可以在没有任何参数的情况下调用它。我的汽车课也一样。car类是车辆类的子类

在我的vehicle类中,我给一个变量分配了一个字符串和一些文本。我的子类如何继承该变量

代码:

当我运行代码时,我得到:

AttributeError: 'Car' object has no attribute '_Car__astring'

我确实理解为什么,但我不知道如何用字符串继承该变量。

将属性标记为private(这意味着它不应该直接在该类的方法之外使用,也不是说它不能)的正确方法是在它前面加一个下划线

getter方法应该返回值,而不是打印它。如果需要打印值,则始终可以打印
get_string
的返回值;无法(轻松)访问由方法直接打印的值

class Vehicle(object):
    def __init__(self):
        self._astring = 'Hello'

    def get_a_string(self):
        return self._astring


class Car(Vehicle):
    def __init__(self):
        Vehicle.__init__(self)
        # Here I need to make a working variable
        self._car_string = self.get_a_string()
        self._car_string2 = ' Again'
        self._big_string = self._car_string + self._car_string2

    def get_car_string(self):
        print self._big_string

该语言本身不会阻止您访问
车辆。\直接在
车辆
类之外使用
,但这样做应该被视为一个错误。

如果您希望子类能够访问该属性,为什么它的名称为
\u双\u前导\u下划线
?名称混乱的全部目的是避免冲突,因此您可以在子级和父级中使用相同的名称。这与是否具有
\uuuu init\uuuu
参数无关。还有,为什么不使用
super
?我认为让属性隐藏/私有是用Python编写代码的正确方法。因此,这使得属性只能从objects方法访问。所以你说这就是问题所在?@nutgut通读一遍。嗯:1。不,不是,我们都是成年人,在Python中没有任何东西是真正私有的/受保护的;2.如果您确实想按约定将其私有化,那么这是
\u single\u leading\u下划线
而不是
\u double
;三,。是的,这就是问题所在。在编写Python时,不要担心公共/受保护/私有。看到和
class Vehicle(object):
    def __init__(self):
        self._astring = 'Hello'

    def get_a_string(self):
        return self._astring


class Car(Vehicle):
    def __init__(self):
        Vehicle.__init__(self)
        # Here I need to make a working variable
        self._car_string = self.get_a_string()
        self._car_string2 = ' Again'
        self._big_string = self._car_string + self._car_string2

    def get_car_string(self):
        print self._big_string