有时在__init__
中,我已经拥有了self
应该成为的实例,我只是想将其设置为该实例。
最简单的情况是,用于初始化Foo
的参数本身就是Foo
。
(Foo(Foo(x)) == Foo(x)
就像set({1, 2}) == {1, 2}
。)
在本例中,这是case_trivial
。但也有{
目前,我必须单独设置每个属性。有没有一种方法可以在一行中做到这一点
from variadic_foo_operations import foo_addition, foo_multiplication
class Foo(object):
def __init__(self, arg=None, addends=None, factors=None):
case_arg = arg is not None
case_normal = case_arg and type(arg) == int
case_trivial = case_arg and type(arg) == Foo
case_add = addends is not None
case_multiply = factors is not None
case_variadic = case_add or case_multiply
if case_normal:
self.bar = arg
self.double_bar = 2 * arg
elif case_trivial:
the_foo_i_want = arg
elif case_variadic:
operation = foo_addition if case_add else foo_multiplication
operands = addends if case_add else factors
current_foo = Foo(0) if case_add else Foo(1) # neutral element
for operand_foo in operands:
current_foo = operation(current_foo, operand_foo)
the_foo_i_want = current_foo
if case_trivial or case_variadic:
# What I would like:
self = the_foo_i_want
# What I have to do instead:
self.bar = the_foo_i_want.bar
self.double_bar = the_foo_i_want.double_bar
在这里找到答案:How to copy all properties of an object to another object
相关问题 更多 >
编程相关推荐