Определение метода класса против передачи объекта в качестве параметра функции в ООП - PullRequest
0 голосов
/ 20 мая 2019

У нас есть 2 способа изменить состояние объекта

Мы создаем метод в классе и вызываем его для изменения состояния.пример

class Car:
    def __init__(self, color):
        self.car_color = color

    # this method may have complex logic of computing the next color. for simplicity, I created this method just like a setter.
    def change_color(self, new_color):
        self.car_color = new_color

Или мы можем передать объект класса методу и изменить состояние.пример

class Car:
    def __init__(self, color):
        self.car_color = color
    # these are just getters and setter and wont have complicated logic while setting color.
    def set_color(self, new_color):
        self.car_color = new_color
    def get_color(self):
        return self.car_color

# this method will have all the complicated logic to be performed while changing color of car.
def change_color(car_object, new_color):
    car_object.set_color(new_color)

Какой из вышеперечисленных подходов лучше в терминах объектно-ориентированного программирования?Я делал второй подход все время, но теперь меня немного смущает вопрос, какой из них лучше.

1 Ответ

1 голос
/ 20 мая 2019

Я бы предложил третий подход, создать экземпляр объекта с новым цветом и определить внешнюю функцию, которая берет старый цвет и возвращает новый цвет

class Car:
    def __init__(self, color):
        self.car_color = color

#A function which takes in the old_color and provides the new color
def logic_to_change_color(old_color):
    #do stuff
    return new_color

car = Car(logic_to_change_color(old_color))

В противном случае первый вариант является лучшим, поскольку он сохраняет все методы, относящиеся к классу Car, в самом определении, чего не делает второй вариант, когда вам необходимо явно передать объект в функцию, (В первом варианте доступ к экземпляру класса осуществляется с помощью self)

...