我有一个功能
def foo(a):
first_thing = 'first' + a
second_foo = 'second' + a + 'bar'
return first_thing, second_foo
返回元组。 我怎样才能实现像
这样的东西class Thing(object):
def __init__(self, a):
first_thing, second_foo = foo(a)
self.first_thing = first_thing
self.second_foo = second_foo
以更好,更自动化的方式?
我试验过:
def __init__(self, a):
for key, value in foo(a):
setattr(self, key, value)
但无法正确拆包。
答案 0 :(得分:2)
你的函数返回一个值元组(一个2元组)而不是一个2元组的迭代。您正在迭代包含字符串的元组,并且您无法将返回的字符串解压缩为两个字符串。
您可以坚持使用原始解决方案或将项目直接解压缩到实例属性中:
self.first_thing, self.second_foo = foo(a)
对于许多属性:
_ATTR_NAMES = ('first_thing', 'second_foo')
class Thing(object)
def __init__(self, a):
for key, value in zip(_ATTR_NAMES, foo(a)):
setattr(self, key, value)
答案 1 :(得分:1)
为什么不呢:
class Thing(object):
def __init__(self, a):
self.first_thing, self.second_foo = foo(a)
您不需要__init__()
函数内的第一行。
根据您的评论,您可以在foo
函数中返回字典并使用setattr()
,更新的解决方案将是:
def foo(a):
first_thing = 'first' + a
second_foo = 'second' + a + 'bar'
return {'first_thing': first_thing, 'second_foo': second_foo}
class Thing(object):
def __init__(self, a):
for k, v in foo(a).items():
setattr(self, k, v)
答案 2 :(得分:1)
如果您的函数返回不同数量的参数,则可以从<script th:inline="javascript">
/*<![CDATA[*/
$(document).ready(function(){
var page = $("#page").val();
for(var i=1;i< page;i++){
}
});
/*]]>*/
</script>
返回字典,并更新{
"type": "hlfv1",
"orderers": [
{ "url" : "grpc://consortium_orderer:7050" }
],
"ca": { "url": "http://myorg_ca:7054",
"name": "ca.example.com"
},
"peers": [
{
"requestURL": "grpc://myorg_peer:7051",
"eventURL": "grpc://myorg_peer:7053"
},
{
"requestURL": "grpc://otherorg_peer:7051"
}
],
"keyValStore": "/home/vagrant/.composer-credentials",
"channel": "mychannel",
"mspID": "Org1MSP",
"timeout": 300
}
属性。
foo
__dict__
请注意这种方法的注意事项,最重要的一点是缺乏对正在更新的内容的控制。