Próbowałem dowiedzieć się o metaclasses w Pythonie. Mam główny pomysł, ale nie mogę aktywować mechanizmu. Jak rozumiem, możesz określić M jako metaklas podczas konstruowania klasy K, ustawiając __metaclass__
na M na poziomie globalnym lub klasowym. Aby to przetestować, napisałem poniższy program:Nie powinno __metaclass__ wymuszać użycia metaclass w Pythonie?
p = print
class M(type):
def __init__(*args):
type.__init__(*args)
print("The rain in Spain")
p(1)
class ClassMeta:
__metaclass__ = M
p(2)
__metaclass__ = M
class GlobalMeta: pass
p(3)
M('NotMeta2',(), {})
p(4)
Jednak, kiedy go uruchomić, pojawia się następujący komunikat:
C:\Documents and Settings\Daniel Wong\Desktop>python --version Python 3.0.1 C:\Documents and Settings\Daniel Wong\Desktop>python meta.py 1 2 3 The rain in Spain 4
nie powinienem widzieć „Deszcz w Hiszpanii” po 1 i 2? Co tu się dzieje?
Podwójne negatywne "nie ... nie wymusza" jest trudne do przeanalizowania. Mógłbyś to naprawić? –
Dzięki za opinię. Myślę, że teraz powinno być łatwiej zrozumieć. – allyourcode