@classmethod不更新python中的类实例属性

时间:2019-02-21 19:12:50

标签: python python-3.x

我期望实例值的“ maintanenance_freq”属性更改为6,但是我看不到这种情况。它显示12.我在这里错过了什么吗?


import datetime

class car():

    def __init__(self, color,make,model,year,maintanenance_freq):
        self.color=color
        self.make=make
        self.model=model
        self.year=year
        self.maintanenance_freq=maintanenance_freq

    def vehicle_age(self):
        now = datetime.datetime.now()
        return(now.year-self.year)

    @classmethod
    def maintenance_window_cls(cls,window):
        cls.maintanenance_freq = window
        return cls.maintanenance_freq

car1= car("Green","Honda","Accord",2014,12)
car2= car("White","Lexus","NX",2017,12)


car.maintenance_window_cls(6)

print(car2.maintanenance_freq)

1 个答案:

答案 0 :(得分:0)

您正在将类属性与实例属性混淆。

在此类中,race是类属性,而nameage是实例属性:

class Person(object):
    race = "human"
    def __init__(self, name, age):
        self.name = name
        self.age = age

Person的每个实例都有自己的nameage值,并且所有实例都为race共享一个值。

在您的示例中,您要设置与实例属性同名的类属性,这几乎没有用,因为实例属性优先于同名的类属性。

car.maintanenance_freq(类属性)设置为6,但是car2.maintanenance_freq(实例属性)仍设置为12。