Я всегда настроить метаклассами что-то вроде этого:Есть ли какая-либо причина для выбора __new__ над __init__ при определении метакласса?
class SomeMetaClass(type):
def __new__(cls, name, bases, dict):
#do stuff here
Но я просто наткнулся метаклассе, который был определен, как это:
class SomeMetaClass(type):
def __init__(self, name, bases, dict):
#do stuff here
Есть ли основания предпочесть один над другим ?
Update: Имейте в виду, что я спрашиваю об использовании __new__
и __init__
в метаклассе. Я уже понимаю разницу между ними в другом классе. Но в метаклассе я не могу использовать __new__
для реализации кэширования, потому что __new__
вызван только созданием класса в метаклассе.
Значительно яснее. И это имеет смысл. Есть ли причина использовать '__init__'? –
'__new__' может делать все, что может сделать' __init__', но не наоборот. '__init__' может быть более удобным в использовании, так же, как' __new__' и '__init__' связаны с регулярной реализацией класса. Вы должны помнить, например, что-то возвращать из '__new__', но с' __init__' вы этого не делаете. –
@JasonBaker Я понимаю, что это 5-летняя тема, и я не ожидаю ответа. Не хотите ли вы использовать __init__ всякий раз, когда вам нужно создать экземпляр класса, о котором идет речь. Как с [flyweight pattern] (http://en.wikipedia.org/wiki/Flyweight_pattern). –