這裏有點奇怪的問題。如果我有兩個單獨的對象,每個都有自己的變量和函數,那麼這兩個對象可以組合成一個單獨的對象嗎?Python:將兩個獨立的對象合併爲一個?
更具體一點:我有一個有15個變量的對象,然後我有自己的對象。我想將這些變量加載到自身中。有沒有簡單的方法來做到這一點,或者我必須手動做到這一點?
這裏有點奇怪的問題。如果我有兩個單獨的對象,每個都有自己的變量和函數,那麼這兩個對象可以組合成一個單獨的對象嗎?Python:將兩個獨立的對象合併爲一個?
更具體一點:我有一個有15個變量的對象,然後我有自己的對象。我想將這些變量加載到自身中。有沒有簡單的方法來做到這一點,或者我必須手動做到這一點?
使用__dict__
屬性:self.__dict__.update(other.__dict__)
有角落情況下,這是不行的,特別是在類中定義的任何變量,而不是在方法(或其他「運行代碼」)。
如果你想複製幾乎所有過:一次從另一個對象拷貝成員
for k in filter(lambda k: not k.startswith('_'), dir(other)): # avoid copying private items
setattr(self, k, getattr(other, k))
您可以創建一個像代理一樣工作的對象 - 只需調用對象的方法和變量即可。在Python中,你可以使用__getattr__()
爲:
class A:
def __init__(self):
self.a1 = 1
self.a2 = 2
def a(self):
return "a"
class B:
def __init__(self):
self.b1 = 1
self.b2 = 2
def b(self):
return "b"
class Combine:
def __init__(self, *args):
self.__objects = args
def __getattr__(self, name):
for obj in self.__objects:
try:
return getattr(obj, name)
except AttributeError:
pass
raise AttributeError
obj = Combine(A(), B())
print obj.a1, obj.a2, obj.a()
print obj.b1, obj.b2, obj.b()
快,但是醜(不安全的)方式:
self.__dict__.update(otherobj.__dict__)
這不會複製方法和靜態(類)成員。
vars(obj)
回報obj.__dict__
所以
vars(self).update(vars(obj))
工程太
for k,v in other.__dict__.items():
# you might want to put other conditions here to check which attrs you want to copy and which you don't
if k not in self.__dict__.keys():
self.__dict__[k]=v
你可能必須寫你自己的[複製]構造函數,拷貝了成員,除非有某種繼承類之間的關係。 – prelic 2012-03-06 20:37:39
'object1 .__ dict __。update(object2 .__ dict __)'? – 2012-03-06 20:42:36
總是值得一問,你爲什麼要這樣做? – 2012-03-06 21:06:16