更改变量属性,相应地评估其他属性
Change variable attribute, evaluate other attributes accordingly
我正在尝试找到一种方法,让所有属性在 class 中的一个属性更改后进行评估,而无需调用 class 之外的函数。
class Students:
def __init__(self, name, mylist):
self.name = name
self.subjects = mylist
self.credits = len(self.subjects) * 2
def credits_calc(self):
self.credits = len(self.subjects) * 2
return self.credits
john = Students("John", ["Maths", "English"])
print(john.subjects)
print(john.credits)
john.subjects.append("History")
print(john.subjects) # --> subjects attribute updated.
print(john.credits) # --> obviously not updated. Still returns initial value.
我必须调用 class 之外的函数来更新其他属性
john.credits_calc() # I know I can take the returned value.
print(john.credits) # --> updated after calling the function.
所以我的问题是如何获取其他属性来评估是否更改了一个属性,而无需稍后手动调用该函数。
您正在寻找的是 property
装饰器。您可以添加其他方法,特别是此属性的 fset 和 fdel 逻辑,下面的代码简单地定义了 fget行为。
class Students:
def __init__(self, name, mylist):
self.name = name
self.subjects = mylist
@property
def credits(self):
return len(self.subjects) * 2
john = Students("John", ["Maths", "English"])
print(john.credits) # 4
john.subjects.append("History")
print(john.credits) # 6
我正在尝试找到一种方法,让所有属性在 class 中的一个属性更改后进行评估,而无需调用 class 之外的函数。
class Students:
def __init__(self, name, mylist):
self.name = name
self.subjects = mylist
self.credits = len(self.subjects) * 2
def credits_calc(self):
self.credits = len(self.subjects) * 2
return self.credits
john = Students("John", ["Maths", "English"])
print(john.subjects)
print(john.credits)
john.subjects.append("History")
print(john.subjects) # --> subjects attribute updated.
print(john.credits) # --> obviously not updated. Still returns initial value.
我必须调用 class 之外的函数来更新其他属性
john.credits_calc() # I know I can take the returned value.
print(john.credits) # --> updated after calling the function.
所以我的问题是如何获取其他属性来评估是否更改了一个属性,而无需稍后手动调用该函数。
您正在寻找的是 property
装饰器。您可以添加其他方法,特别是此属性的 fset 和 fdel 逻辑,下面的代码简单地定义了 fget行为。
class Students:
def __init__(self, name, mylist):
self.name = name
self.subjects = mylist
@property
def credits(self):
return len(self.subjects) * 2
john = Students("John", ["Maths", "English"])
print(john.credits) # 4
john.subjects.append("History")
print(john.credits) # 6