我了解都__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的这个方面更适合我.
我试图了解如何使用这两种方法.我知道这__new__ 用于创建一个对象,同时__init__进行初始化.但是我不确定在创建对象时会发生什么.
这是否意味着__new__和__init__必须具有相同的参数?
如果我不使用相同的参数会发生什么?
根据这个答案,如何__new__和__init__应该在Python中工作,
我编写了这段代码来动态定义和创建一个新的类和对象.
class A(object):
def __new__(cls):
class C(cls, B):
pass
self = C()
return self
def foo(self):
print 'foo'
class B(object):
def bar(self):
print 'bar'
a = A()
a.foo()
a.bar()
Run Code Online (Sandbox Code Playgroud)
基本上,因为__new__A返回一个继承A和B的动态创建的C,它应该有一个属性bar.
为什么C 不能有一个bar属性?