首页 > 解决方案 > 如何确定天气函数中使用的默认参数值?

问题描述

有两个函数:init 和 set_info。(完整的视觉显示在最后)

class DefaultNode(object):

    def __init__(self, node_name, node_pre= None, node_next = None, 
act_func='sign', agg_func='sum', bias=0.0, response=1.0, node_type=None):
    ...

    def set_info(self, node_pre= None, node_next = None, act_func='sign', 
agg_func='sum', bias=0.0, response=1.0):
    ...

Set_info 函数有许多默认参数值。我不想重写那些在初始化过程中给出的参数。换句话说,如果要使用set_info设置参数之一,则其他参数应保持不变。

例如,

 temp_node = DefaultNode("givenname", node_pre = PRE) 
 temp_node.set_info("changedname")

temp_node 的“node_pre”参数在初始化时应该是“PRE”,而不是被函数“set_info”中的默认参数替换,即

node_temp.node_pre != sign

问题很简单:如何实现它?

谢谢~

class DefaultNode(object):
    def __init__(self, node_name, node_pre= None, node_next = None, act_func='sign', agg_func='sum', bias=0.0, response=1.0, node_type=None):
        self.node_name = node_name
        self.node_pre = node_pre
        self.node_next = node_next
        self.act_func_name = act_func
        self.agg_func_name = agg_func
        if act_func == "sign":
            self.act_func = signmus_activation()

        if agg_func == 'sum':   # sign 和sum 是作为一个初始标记使用
            self.agg_func = sum
        self.bias = bias
        self.response = response
        self.node_type = node_type  

    def set_info(self, node_pre= None, node_next = None, act_func='sign', agg_func='sum', bias=0.0, response=1.0):
        self.node_pre = node_pre
        self.node_next = node_next        
        self.act_func_name = act_func
        self.agg_func_name = agg_func
        if act_func == "sign":
            self.act_func = signmus_activation()
        if agg_func == "sum":
            self.agg_func = sum
        self.bias = bias
        self.response = response

标签: pythonparametersdefault-value

解决方案


编辑2:在您进一步澄清您的问题后更新了我的回复(谢谢!)。

选项 1:您可以使用**kwargssetattr使参数列表保持同步。例如,

class Example(object):

    def __init__(self):
        self.first = 1
        self.second = 2

    def set_info(self, **kwargs):
        for argument, value in kwargs.items():
            if not hasattr(self, argument):
                raise ValueError('invalid argument {}'.format(argument))
            setattr(self, argument, value)


# Usage
e = Example()
print(e.first, e.second)
e.set_info(first=1000, second=2000)
print(e.first, e.second)

# This would raise an exception
# e.set_info(some_random_attribute='blah')

这输出:

1 2
1000 2000

选项 2:您可以使用 @property 并为每个设置相应的设置器,而不是使用单独的方法来设置字段。例如,

class Properties(object):

    def __init__(self):
        self._thing = 10

    @property
    def thing(self):
        return self._thing

    @thing.setter
    def thing(self, t):
        self._thing = t


# Usage
p = Properties()
print(p.thing)
p.thing = 20
print(p.thing)

哪个打印

10
20

推荐阅读