0
我創建鏈接的方法在一組類,但是當我在鏈條的最後一個環節設置的值,它是什麼,我想改寫值分別爲內單獨的實例類鏈。鏈類方法覆蓋彼此當只有一個被設置
例如:
sub0.one.some.a.time_t.raw = 1
sub0.one.some.b.time_t.raw = 2
但:
print sub0.one.some.a.time_t.raw
返回2
(未1
,如上設定)
print sub0.one.some.b.time_t.raw
返回2
代碼如下。 Sub0
是連鎖的頂級水平,Sub4
是最低的。我使用type()
方法在類中添加類的實例作爲方法。
爲什麼不sub0.one.some.a.time_t.raw
返回1
,因爲我給自己定了嗎?它不是鏈中所有類的單獨實例嗎?
class Sub4(object):
pass
class Sub3(object):
pass
class Sub2(object):
pass
class Sub1(object):
def __init__(self, config):
self.config_field = config['flag']
class Sub0(object):
def __init__(self, config):
self.config = config
sub4_methods = ['raw']
Sub4 = type("Sub4", (Sub4,), { sub4:None for sub4 in sub4_methods})
sub3_methods = ['time_t']
Sub3 = type("Sub3", (Sub3,), { sub3:Sub4() for sub3 in sub3_methods})
sub2_methods = ['a', 'b']
Sub2 = type("Sub2", (Sub2,), { sub2:Sub3() for sub2 in sub2_methods})
sub1_methods = ['all', 'some']
Sub1 = type("Sub1", (Sub1,), { sub1:Sub2() for sub1 in sub1_methods})
configs = {
"one": { "flag": True },
"two": { "flag": False },
}
Sub0 = type("Sub0", (Sub0,), { k:Sub1(v) for (k,v) in zip(configs.keys(), configs.values())})
#create class instance
sub0 = Sub0(configs)
#set values
sub0.one.some.a.time_t.raw = 1
sub0.one.some.b.time_t.raw = 2
#both of these return 1, even though they are set to 1 & 2 respectively
print sub0.one.some.a.time_t.raw
#returns 1
print sub0.one.some.b.time_t.raw
#returns 1
謝謝!
你爲什麼要叫'type'這裏?這聽起來像你可能不知道你使用的工具實際上應該做什麼。 – user2357112
我使用'type'來創建任意方法(請參閱* _methods lists),這些方法是另一個類的實例,同時繼承基類中的所有預設方法。其他人怎麼做呢? –