mclb 发表于 2022-3-12 14:48:40

Python int对象 里面哪个属性决定着它本身的值

class Test(int):
    @staticmethod
    def __new__(cls, index):
      return super(cls, cls).__new__(cls)

    def __init__(self, index):
      self.index = index

    def __int__(self):
      return self.index

    def __float__(self):
      return float(self.index)

    def __repr__(self):
      return "%s" % self.index

    def __str__(self):
      return "%s" % self.index

a = Test(55)

print(0 + a)
print(a)
print(int(a))
print(float(a))

# 重写所有方法,总感觉那样太蠢了......{:10_266:}

大西瓜吃吃 发表于 2022-3-12 15:49:53

本帖最后由 大西瓜吃吃 于 2022-3-12 16:07 编辑

你好同学,当你继承int类后,相当于已经有了("继承"了)它所有的特性,因此你只需要增加你个人的新方法即可,如下:
class MyInt(int):
    def my_add(self, other):
      return MyInt(
            self + other
      )

a = MyInt(55)

b = a.my_add(10)
# b -> MyInt(65)
请你务必注意到,此时的self也就是实例本身,还记得吗,你自己继承了int类啦!
同时我也注意到了,你在重写 __init__,这个案例里你完全无此必要,因为你可以从我的代码中仔细意识到,self就是MyInt实例本身!由于你继承了 int,这相当于也在说:self就是你到时候int类的实例本身!!(很显然我的例子代码中无复写任何int本来有的方法)

额外注明1:请注意到,当执行完我的代码后,b变量为 65,并且是MyInt类型的,这是因为我返回啦!你大可以看作一个正常的方法啦!

额外注明2:注意到你给出的代码中正在试图自己定义各种方法,这当然是可以的,但是你就没有必要去继承int类了。你自行定义一个你个人的类,不去继承int,然后去补充各个行为,这个是可以接受哒~

{:10_254:} {:10_254:} {:10_254:}
页: [1]
查看完整版本: Python int对象 里面哪个属性决定着它本身的值