相关疑难解决方法(0)

Python中的__new__和__init__

我正在学习Python和到目前为止,我可以告诉低于约的事情__new____init__:

  1. __new__ 用于创建对象
  2. __init__ 用于对象初始化
  3. __new__被调用之前__init____new__返回一个新的实例,并__init__随后调用初始化内部状态.
  4. __new__对于不可变对象是有益的,因为它们一旦被分配就无法更改.所以我们可以返回具有新状态的新实例.
  5. 我们可以使用__new____init__为两个可变对象,因为它的内部状态可以改变.

但我现在还有另外一个问题.

  1. 当我创建一个新实例时a = MyClass("hello","world"),如何传递这些参数?我的意思是我应该如何构造类__init__,__new__因为它们是不同的,并且除了默认的第一个参数之外都接受任意参数.
  2. self关键字在名称方面可以改为别的吗?但我想知道cls在名称方面可能会改变其他东西,因为它只是一个参数名称?

我做了一些实验,如下:

>>> class MyClass(tuple):
    def __new__(tuple):
        return [1,2,3]
Run Code Online (Sandbox Code Playgroud)

我在下面做了:

>>> a = MyClass()
>>> a
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

虽然我说我想回来tuple,但这段代码运行正常并且还给了我[1,2,3].我知道在__new__调用函数后,我们将第一个参数作为我们想要接收的类型传递.我们说的是New功能对吗?我不知道除绑定类型以外的其他语言返回类型?

我也做了其他事情:

>>> issubclass(MyClass,list)
False
>>> issubclass(MyClass,tuple)
True
>>> isinstance(a,MyClass)
False
>>> isinstance(a,tuple)
False
>>> isinstance(a,list) …
Run Code Online (Sandbox Code Playgroud)

python class

51
推荐指数
1
解决办法
2万
查看次数

标签 统计

class ×1

python ×1