4

我正在尝试找出 Python 中的封装。我在 shell 中做了一个简单的小测试,看看它是如何工作的,它不像我预期的那样工作。我无法让它工作。这是我的代码:

class Car:
    def __init__(self, carMake, yrMod):
        self.__make = carMake
        self.__yearModel = yrMod
        self.__speed = 0

    #Mutator Methods
    def set_make(self, make):
        self.__make = carMake

    def set_model(self, yrMod):
        self.__yearModel = yrMod

    #def set_speed(self, speed):
        #self.__speed = speed

    #Accessor Methods
    def get_make(self):
        return self.__make

    def get_yearModel(self):
        return self.__yearModel

    def get_speed(self):
        return self.__speed

myCar=Car('Ford', 1968)
myCar2=Car('Nissan', 2012)
myCar.get_make()
'Ford'
myCar.set_make=('Porche')
myCar.get_make()
'Ford'

为什么 myCar.set_make 不把 Ford 改成 Porche?谢谢你。

4

2 回答 2

9

使用myCar.set_make=('Porche'),您将此成员设置为 Car 类作为'Porche'字符串,但您没有调用该方法。

只需删除=即可解决它:

myCar.set_make('Porche')
myCar.get_make() # Porche

此外,正如@DSM 指出的那样, 的参数存在错误set_make

def set_make(self, make):
    self.__make = make # carMake is not defined!

但是,强烈反对在 Python 中使用 getter 和 setter。如果您出于任何原因需要类似的东西,请考虑使用properties

于 2013-04-07T20:54:02.460 回答
-1
new_car = Car(...)
new_car2 = Car(...)

new_car._make = 'Ford'
new_car2.make = 'Jetta'

print new_car._make
print new_car2.make
于 2014-08-18T22:06:43.150 回答