如何确定天气函数中使用的默认参数值?

有两个函数: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


catspeake
浏览 146回答 1
1回答

神不在的星期二

编辑2:在您进一步澄清您的问题后更新了我的回复(谢谢!)。选项 1:您可以使用**kwargs和setattr使参数列表保持同步。例如,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)# Usagee = 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 21000 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# Usagep = Properties()print(p.thing)p.thing = 20print(p.thing)哪个打印1020
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python