[英]updating values of class attributes
我有一个类如下:
class MyClass(object):
def __init__(self, input1, input2):
self.attribute1 = [(a1_d1, a1_p1), (a1_d2, a1_p2)]
self.attribute2 = [(a2_d1, a2_p1), (a2_d2, a2_p2), ..., (a2_d10, a2_p10)]
...some other attributes here...
每对中的第一个坐标是一些决策/动作,第二个坐标是选择该动作的概率。 我想编写一个函数,在程序运行时更新此类实例的这些概率。 更新概率的方式取决于先前所做的决定。 例如,我可以编写以下类型的函数:
def update_probabilities_attribute1(self, decision):
i = 0
for action, current_probability in self.attribute1:
SOME CODE HERE
self.attribute1[i] = (action, new_probability)
i = i + 1
def update_probabilities_attribute2(self, decision):
i = 0
for action, current_probability in self.attribute2:
SOME CODE HERE
self.attribute1[i] = (action, new_probability)
i = i + 1
这里的部分代码部分对于两个功能是通用的。 无论如何,我可以拥有一个函数而不是两个不同的函数,这些函数将self.attribute1或self.attribute2作为输入并相应地对其进行更新。
谢谢。
self.attribute = function_name(previous_attribute_value)
然后得到一个值:
def function_name(attribute):
#Compute the new value
return new_attribute_value
我猜您也可以使用lambda
来代替调用函数,但是它可能不太可重用。
你可以使用getattr
和亲戚:
def update_probabilities(self, attribute_name, decision):
i = 0
attr_value = getattr(self, attribute_name)
for action, current_probability in attr_value:
#SOME CODE HERE
attr_value[i] = (action, new_probability)
i = i + 1
setattr(self, attribute_name, attr_value)
由于您的“属性”从根本上表现出相同的行为并且受到相同类型的处理,因此只需将它们放入列表中(您显然已经知道列表如何工作)并选择适当的列表。
另外,不要仅仅因为要修改列表的每个元素而使用索引。 您可以只创建一个新列表,然后将其重新分配到位。 或者更好的是,使用列表推导来描述旧列表如何转换为新列表。
class MyClass(object):
def __init__(self, input1, input2):
self.attributes = [
[(a1_d1, a1_p1), (a1_d2, a1_p2)],
[(a2_d1, a2_p1), (a2_d2, a2_p2), ..., (a2_d10, a2_p10)],
# etc.
]
def update_probabilities(self, which_attribute, decision):
self.attributes[which_attribute] = [
(action, new_probability_for(action, current_probability, decision))
for (action, current_probability) in self.attributes[which_attribute]
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.