2009-09-21 79 views
0

比方說,我有這樣的:給定一個類的類型如何在Python中創建一個實例?

class whatever(object): 
    def __init__(self): 
     pass 

這個功能:

def create_object(type_name): 
    # create an object of type_name 

我希望能夠調用的create_object這樣的:

inst = create_object(whatever) 

,並取回whatever的實例。我認爲這應該是可行的,而不使用eval,我想知道如何做到這一點。請注意,我是不是使用字符串作爲create_object的參數。

+0

你在閱讀什麼Python教程,@Geo?你的問題表明本教程缺少重要信息。你讀過哪一個? –

回答

7

最明顯的方法:

def create_object(type_name): 
    return type_name() 
+0

它並沒有讓我想到'type_name'是可調用的。 – Geo

+0

類只是Python中普通的第一類對象,與其他變量共享相同的名稱空間。 – bobince

2

如果我理解正確的,你想要的是:

def create_object(type_name, *args): 
    # create an object of type_name 
    return type_name(*args) 

inst = create_object(whatever) 

我真的不知道爲什麼要做到這一點,但會聽取你的意見是有趣的,你有什麼理由需要這樣的結構。

+0

只是想知道它是否可以沒有eval :) – Geo

+1

'eval'和它的醜陋,乖乖的兄弟,'exec'很少需要,如果有的話。只要你採取措施不使用appliaction'globals'和'locals','eval'就可以用來評估用戶的輸入。 – voyager

2
def create_object(type_name): 
    return type_name() 

當然你也可以完全跳過功能,創造whatever這樣的實例:

inst = whatever() 
5
def create_object(typeobject): 
    return typeobject() 

正如你這麼明確地說,對Arg的create_object並不意味着是一個字符串,我假設它的意思是類型對象本身,就像你給的create_object(whatever)例子,其中whatever確實是它自己的類型。

相關問題