我试图弄清楚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没有将福特变成保时捷?谢谢。
答案 0 :(得分:6)
使用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!
然而,this use of getters and setters in Python is strongly discouraged。如果您因任何原因需要类似的内容,请考虑使用properties。
答案 1 :(得分:-1)
new_car = Car(...)
new_car2 = Car(...)
new_car._make = 'Ford'
new_car2.make = 'Jetta'
print new_car._make
print new_car2.make