为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

catspeake 2022-05-24 10:49:34
有两个函数: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
查看完整描述

1 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

编辑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)



# 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


查看完整回答
反对 回复 2022-05-24
  • 1 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信