python的new方法 使用場景不同效果也不一樣
一種是指定元類時候, metaclass=MyType 類型
這種方式 在解釋器執行到 metaclass=CrawlerProxyMetaclass
的時候, __new__方法就開始執行!
這里的 __new__方法是用來創建類對象的
class CrawlerProxyMetaclass(type):def __new__(cls, classname, parentclass, attrs):attrs['__crawl_method__'] = []print('in method new ')count = 0for key, value in attrs.items():if key.startswith('crawl_'):attrs['__crawl_method__'].append(key)count += 1attrs['__crawl_method_count__'] = countreturn super().__new__(cls, classname, parentclass, attrs)#return type.__new__(cls, classname, parentclass, attrs)
一種普通普通的繼承關系 調用父類的__new__方法
這里的__new__方法是用來創建對象實例的
創建對象的時候才會被調用
先看object的 __new__方法
@staticmethod # known case of __new__def __new__(cls, *more): # known special case of object.__new__""" Create and return a new object. See help(type) for accurate signature. """pass
我們重寫父類的 __new__方法時候可以
def __new__(cls, *args, **kwargs):return super().__new__(cls, *args, **kwargs)