FK二十一 发表于 2021-10-11 15:50:41

魔法方法之这到底是什么牛马情况。。。

所以new传给init 的参数,在半路被截胡了?换成了原本的32???

Stubborn 发表于 2021-10-11 17:14:54

__new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例对象,是个静态方法。
__init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值,通常用在初始化一个类实例的时候。是一个实例方法。

new返回了一个实例对象,so,init 接受的也是一个示例对象,你看self和 x那个比较像 实例对象 ,可以尝试打印self看看

qaoapp 发表于 2021-10-11 20:51:14

__new__只会传一个对象实例给__init__, 参数跟它无关, 你的需求应该这么写
class C2F(float):
    def __new__(cls, arg):
      arg = arg * 1.8 + 32
      self = float.__new__(cls, arg)
      self._init__(arg) # 注意少一个下划线
      return self

    def _init__(self, x):
      self.x = x
      print(self.x)
页: [1]
查看完整版本: 魔法方法之这到底是什么牛马情况。。。