python 类实例化过程
参考:
cls 与 self 区别
cls表示当前类,self表示对象实例
self主要用于调用实例方法
, cls主要用于调用类方法
__int__ 和 __new__区别
Use
__new__
when you need to control the creation of a new instance.Use
__init__
when you need to control initialization of a new instance.
__new__
is the first step of instance creation. It's called first, and is responsible for returning a new instance of your class.In contrast,
__init__
doesn't return anything; it's only responsible for initializing the instance after it's been created.In general, you shouldn't need to override
__new__
unless you're subclassing an immutable type like str, int, unicode or tuple.
From April 2008 post: When to use __new__
vs. __init__
? on mail.python.org.
因为__new__ 被调用的时候,对象还没有被创建,所以__new__ 方法接收的第一个参数是cls, new 返回实例对象self, __init__ 第一个参数是self
参考官方文档对两个API的注释: https://docs.python.org/3/reference/datamodel.html#object.__new__
调用父类构造函数
多继承经典问题
class A(object):
def __init__(self, a):
self.a = a
class B(A):
def __init__(self, a, b):
super(B, self).__init__(a)
self.b = b
class C(A):
def __init__(self, a, c):
super(C, self).__init__(a)
self.c = c
class D(B, C):
def __init__(self, a, b, c, d):
#super(D,self).__init__(a, b, c) ???
self.d = d
python multiple inheritance passing arguments to constructors using super
metaclasses: