python中new和init内置函数的区别

__init__(self)__new__(cls)
参数是self : 实例化对象参数cls : 表示当前类本身
无返回值又返回值
对实例化对象进行初始化操作为实例化对象开辟内存空间,创建空对象
在创建对象时自动被调用

在创建对象时自动被调用,new在init之前先被调用

new先开辟内存空间,创建一个空的对象,再将创建的空的对象return给init;

init再在开辟的内存空间内对这个空对象进行初始化,包括对象的属性。

如果new没有return那么init方法就不会被调用

绝大多数时间不需要我们实现__new__方法,python已经帮我们实现:使用父类的__new__()方法来创建对象并返回. 所以例子1中的两个类是等价的
__init__(self, par1, par2) 和__new__(cls, par1, par2)中的参数及其个数要保持一致, 否则会报错。因为在初始化对象时都会经过__new__(cls)方法,所以一般new方法参数写成可变参数__new__(cls, *args, **kwargs)来保持与init中参数个数一致。
可以只用__new_(cls, *args, **kwargs)而不用__init__(self)来实例化对象(我们创建类时不写new因为python中默认隐藏new方法,如例子2)

例子 1:

class testA(object):
    def __new__(cls, *args, **kwargs):
        return super().__new__(cls)
    def foncA(self):
        print("fonction A")

class testB(object):
    def foncB(self);
        print("fonction B")

__new__(cls)中第一个参数是cls,是因为cls相当于c当前的lass调用__new__(cls)时,实例对象还没有被创建出来。

大部分情况都不需要实现__new__(cls)方法,因为python中已经默认实现,使用父类super().__new__(cls)方法创建对象并将对象放回给init,所以以上代码是等价的。

例子2:

class Person(object):
    def __new__(cls, age):
        print('__new__() called.')
        obj = super().__new__(cls)
        obj.age = age
        return obj

a = Person(100)
a.age # 100

如上的写法正确但是不建议,一般采用如下写法

class Person(object):
    def __init__(self, age):
        self.age = age
a = Person(100)
a.age # 100

常用定义类的完整写法应该是 

class Person(object):
    def __new__(cls, *args, **kwargs):
        return super().__new__(cls)
    def __init__(self, age):
        self.age = age
a = Person(100)
a.age # 100

参考文章:http://t.csdn.cn/Hb26s

http://t.csdn.cn/6DgGZ

### Python 内置函数使用方法 Python 提供了一系列内置函数来简化开发工作。这些函数可以直接调用而无需额外导入模块。 #### 查阅官方文档 为了获得最权威全面的信息,建议访问Python官方网站上的[官方文档](https://docs.python.org/3/library/functions.html),这里列出了所有的内置函数及其详细描述[^1]。 #### 常见内置函数示例 - **`print()`**: 输出对象到控制台。 ```python print("Hello, world!") ``` - **`len()`**: 返回容器(字符串、列表、元组等)中的项数。 ```python my_list = [1, 2, 3] length_of_my_list = len(my_list) print(length_of_my_list) # 3 ``` - **`sum()`**: 对数值类型的序列求。 ```python numbers = [1, 2, 3, 4, 5] total_sum = sum(numbers) print(total_sum) # 15 ``` - **`max()` `min()`**: 找出最大值或最小值。 ```python max_number = max(1, 2, 3, 4, 5) min_number = min([1, 2, 3]) print(max_number) # 5 print(min_number) # 1 ``` - **`type()`**: 获取变量的数据类型。 ```python a_string = "hello" type_of_a_string = type(a_string) print(type_of_a_string) # <class 'str'> ``` - **`property()`**: 创建属性管理器以便更优雅地处理getter/setter逻辑[^3]. ```python class MyClass: def __init__(self): self._value = 0 @property def value(self): return self._value @value.setter def value(self, new_value): self._value = new_value obj = MyClass() obj.value = 10 print(obj.value) # 10 ``` #### 使用帮助工具 对于不确定如何使用的特定函数,可以通过内置的帮助系统获取更多信息: ```python help(sum) ``` 这会显示有关该函数的具体参数定义、返回值以及其他重要细节[^2].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值