python - 如何确定天气函数中使用的默认参数值?
问题描述
有两个函数: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
解决方案
编辑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
推荐阅读
- transactions - 强制脚本验证标志失败(脚本太大)-多链-区块链
- azure - Application Insights 状态监视器不跟踪 .Net Frameworks 4.5 的 Sql 依赖项
- sql - 如何从公共 1000G bigquery 表中提取基因型
- flutter - setState(() {}); 在 Android Flutter 中需要
- asp.net-mvc - 模型绑定嵌套对象
- css - 为什么我们使用 translate:transform with left 和 right 来使元素居中?
- ruby-on-rails - 评估具有可插值的字符串化 json
- python - 通过给定的 timedelta 在数据框列中查找时间戳
- java - 无法在 tinyMCE 中从服务器接收的 HTML 文件中显示图像
- javascript - 使用 Javascript 将英文日期转换为阿拉伯文本