我想更新我的类中的所有属性,如果我更改至少一个属性,这是我在
Python
中的示例:
class A:
def __init__(self, my_list):
self.my_list = my_list
self.list_len = len(self.my_list)
def update_list(self, var1):
self.my_list.append(var1)
如果我使用 3 个元素的初始列表创建
class A
的实例并调用 list_len
属性,我得到:
a_instance = A([1,2,3])
a_instance.list_len
[Out]: 3
但是如果我更新
my_list
,list_len
属性不会改变,如果my_list
发生变化而不调用类似update_list_len
的方法,是否可以更新这个属性?
您可以将
list_len
转换为 @property
:
class A:
def __init__(self, my_list):
self.my_list = my_list
@property
def list_len(self):
return len(self.my_list)
a_instance = A([1, 2, 3])
print(a_instance.list_len)
a_instance.my_list.append(4)
print(a_instance.list_len)
打印:
3
4
你有3种方法:
方法一:每次更新
list_len
时更新my_list
。这通常不是最好的方法,因为您只是为了复制其他地方已经可用的值而浪费变量。
class A:
def __init__(self, my_list):
self.my_list = my_list
self.list_len = len(my_list)
def update_list(self, var1):
self.my_list.append(var1)
self.list_len = len(self.my_list)
a_instance = A([1, 2, 3])
print(a_instance.list_len) # Prints 3
a_instance.update_list([1, 2, 3, 4, 5])
print(a_instance.list_len) # Prints 5
方法 2:代替变量
list_len
创建一个 getter 函数,该函数将为您提供当前长度:
class A:
def __init__(self, my_list):
self.my_list = my_list
def update_list(self, var1):
self.my_list.append(var1)
def list_len(self):
return len(self.my_list)
a_instance = A([1, 2, 3])
print(a_instance.list_len()) # Prints 3
a_instance.update_list([1, 2, 3, 4, 5])
print(a_instance.list_len()) # Prints 5
方法 3(我认为最好):使用 getter 属性,这与方法 2 非常相似,只是多了一点语法糖。看起来像这样:
class A:
def __init__(self, my_list):
self.my_list = my_list
def update_list(self, var1):
self.my_list.append(var1)
@property
def list_len(self):
return len(self.my_list)
a_instance = A([1, 2, 3])
print(a_instance.list_len()) # Prints 3
a_instance.update_list([1, 2, 3, 4, 5])
print(a_instance.list_len()) # Prints 5