繁体   English   中英

更新类属性的值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM