new_ 方法是什么?
__new__方法其实就是创建对象的方法
new()方法是在类准备将自身实例化时调用。
一个类可以有多个位置参数和多个命名参数,而在实例化开始之后,在调用 init()方法之前,Python首先调用new()方法:
def new(cls, *args, **kwargs): …
第一个参数cls是当前正在实例化的类。
如果要得到当前类的实例,应当在当前类中的new()方法语句中调用当前类的父类 的new()方法。
例如,如果当前类是直接继承自object,那当前类的new()方法返回的对象应该为:
def new(cls, *args, **kwargs): … return object.new(cls)
通常来说,当前类开始实例化时,new()方法会返回cls(cls指代当前类)的实例,然后该类的init()方法作为构造方法会接收这个实例(即self)作为自己的第一个参数,然后依次传入new ()方法中接收的位置参数和命名参数。
注意:如果new()没有返回cls(即当前类)的实例,那么当前类的init()方法是不会被调用的。
如果new()返回其他类的实例,那么只会调用被返回的那个类的构造方法。
class Foo(object): def init(self, *args, **kwargs): pass def new(cls, *args, **kwargs): return object.new(Stranger, *args, **kwargs)
class Stranger(object): pass
foo = Foo() print(type(foo)) 》》》》<class ‘main.Stranger'>
因此可以这么描述new()和ini()的区别,在新式类中new()才是真正的实例化方法,为类提供外壳制造出实例框架,然后调用该框架内的构造方法init()使其丰满。
如果以建房子做比喻,new()方法负责开发地皮,打下地基,并将原料存放在工地。
而init()方法负责从工地取材料建造出地皮开发招标书中规定的大楼,init()负责大楼的细节设计,建造,装修使其可交付给客户。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对小牛知识库的支持。如果你想了解更多相关内容请查看下面相关链接
本文向大家介绍C++中new和delete的使用方法详解,包括了C++中new和delete的使用方法详解的使用技巧和注意事项,需要的朋友参考一下 C++中new和delete的使用方法详解 new和delete运算符用于动态分配和撤销内存的运算符 new用法: 1. 开辟单变量地址空间 1)new int; //开辟一个存放数组的存储空
本文向大家介绍详解详解Python中writelines()方法的使用,包括了详解详解Python中writelines()方法的使用的使用技巧和注意事项,需要的朋友参考一下 writelines()方法写入字符串序列到文件。该序列可以是任何可迭代的对象产生字符串,字符串为一般列表。没有返回值。 语法 以下是writelines()方法的语法: 参数 sequence -- 这是字符串的
本文向大家介绍Python中的choice()方法使用详解,包括了Python中的choice()方法使用详解的使用技巧和注意事项,需要的朋友参考一下 choice()方法从一个列表,元组或字符串返回一个随机项。 语法 以下是choice()方法的语法: 注意:此函数是无法直接访问的,所以我们需要导入random模块,然后我们需要使用random对象来调用这个函数。 参数 seq -- 这
本文向大家介绍Python中的rfind()方法使用详解,包括了Python中的rfind()方法使用详解的使用技巧和注意事项,需要的朋友参考一下 rfind()方法返回所在子str 被找到的最后一个索引,或者-1,如果没有这样的索引不存在,可选择限制搜索字符串string[beg:end]. 语法 以下是rfind()方法的语法: 参数 str -- 此选项指定要搜索的字符串
本文向大家介绍Python中的rjust()方法使用详解,包括了Python中的rjust()方法使用详解的使用技巧和注意事项,需要的朋友参考一下 rjust()该方法返回字符串合理字符串的右边的长度宽度。填充是通过使用指定的fillchar(默认为空格)。如果宽度小于len(s)返回原始字符串。 语法 以下是rjust()方法的语法: 参数 width -- 这是字符串填充后总共的长度
本文向大家介绍详解Python中的strftime()方法的使用,包括了详解Python中的strftime()方法的使用的使用技巧和注意事项,需要的朋友参考一下 strftime()方法转换成一个元组或struct_time表示时间所指定的格式参数所返回gmtime()或localtime()为一个字符串。 当t不设置,所返回当前时间使用localtime()方法。格式必须是字符串。异常Val