2016-05-25 11 views
5

Próbuję określić, czy klasa, która została odebrana przez argument, ma zdefiniowaną przez użytkownika funkcję __init__ w klasie, która została przekazana. Nie w żadnej super klasie.Ustalenie, czy klasa ma zdefiniowaną przez użytkownika __init__

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

class NoInit(object): 
    pass 

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

class StillNoInit(Base): 
    pass 

def has_user_defined_init_in(clazz): 
    return True if # the magic 

assert has_user_defined_init_in(HasInit) == True 
assert has_user_defined_init_in(NoInit) == False 
assert has_user_defined_init_in(StillNoInit) == False 
+0

Być może spojrzeć na http://stackoverflow.com/questions/25295327/how-to-check-if-a-python-class- ma-specific-method-or-not – techydesigner

Odpowiedz

6

myślę, że to będzie działać:

def has_user_defined_init_in(clazz): 
    return "__init__" in clazz.__dict__ 
+0

Upłynęło kilka sekund od opublikowania tego :-). – AKS

+0

Bardzo prosty i elegancki. Większość Pythonic. Dobry kod. –

Powiązane problemy