Accessor和Mutator方法(Python)

use*_*444 4 python mutators

我试图弄清楚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'
Run Code Online (Sandbox Code Playgroud)

为什么myCar.set_make没有将福特变成保时捷?谢谢.

A. *_*das 6

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

只需删除=即可解决问题:

myCar.set_make('Porche')
myCar.get_make() # Porche
Run Code Online (Sandbox Code Playgroud)

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

def set_make(self, make):
    self.__make = make # carMake is not defined!
Run Code Online (Sandbox Code Playgroud)

但是,强烈建议不要在Python中使用getter和setter.如果由于任何原因需要类似的东西,请考虑使用属性.

  • `set_make`(`carMake`而不是'make`)中也有一个错误,所以它还不能正常工作,但你对主要问题是正确的. (3认同)