2010-06-22 125 views
1

我有A類,它應該繼承B類,其名稱在編寫A時還不知道。是否有可能聲明A不繼承任何東西,並且在A的實例化過程中將B作爲基類添加?例如:在Python中動態設置繼承

第一個文件

class B: 
    def __init__(self): 
    self.__name = "Class B" 

    def name(self): 
    return self.__name 

第二個文件

class A: 
    def __init__(self): 
    self.__name = "Class A" 

# At some point here, the appropriate module name and location is discovered 
import sys 
sys.path.append(CustomModulePath) 
B = __import__(CustomModuleName) 

magic(A, B) # TODO What should magic() do? 

a = A() 
print a.name() # This will now print "Class A", since name() is defined in B. 
+2

你能解釋爲什麼你需要這樣做嗎? – danben 2010-06-22 14:48:57

+0

在這個應用程序中,我需要根據應用程序特定的元數據來操作類,而不是使用常規的類名。 – dpq 2010-06-22 15:03:39

回答

2

是的,你可以使用元類做到這一點。這並不是最簡單的話題,但它會完成這項工作。有一個關於他們的Stack Overflow問題,看起來好像有一些很好的信息,我也發現IBM article也可能有幫助。在官方Python文檔的某處,有一節關於它們的內容,但我無法準確記得在哪裏。

+0

SO問題特別有一個關於如何混淆繼承的例子,所以看看肯定 – Claudiu 2010-06-22 14:57:18

+0

看起來metaclasses正是我所需要的,非常感謝! – dpq 2010-06-22 15:08:22