Eog*_*anM 27 python new-style-class
我了解都__init__和__new__工作.我想知道是否有什么__init__可以做到的__new__不可以?
即可以使用__init__以下模式替换:
class MySubclass(object):
def __new__(cls, *args, **kwargs):
self = super(MySubclass, cls).__new__(cls, *args, **kwargs)
// Do __init__ stuff here
return self
Run Code Online (Sandbox Code Playgroud)
我问,因为我想让Python OO的这个方面更适合我.
Mat*_*son 22
因此,类的类通常是type,当你在类的句柄上调用Class()该__call__()方法时Class.我相信type.__call__()或多或少都是这样实现的:
def __call__(cls, *args, **kwargs):
# should do the same thing as type.__call__
obj = cls.__new__(cls, *args, **kwargs)
if isinstance(obj, cls):
obj.__init__(*args, **kwargs)
return obj
Run Code Online (Sandbox Code Playgroud)
你的问题的直接答案是否定的,__init__()可以做的事情(改变/"初始化"指定的实例)是__new__()可以做的事情的一个子集(创建或以其他方式选择它想要的任何对象,对它想要的对象做任何事情)在返回对象之前).
但是,使用这两种方法很方便.使用__init__()更简单(它不需要创建任何东西,它不必返回任何东西),并且我认为__init__()除非您有特定的理由使用,否则最好始终使用__new__().
| 归档时间: |
|
| 查看次数: |
4540 次 |
| 最近记录: |