【问题标题】:Incrementing an instance of int's subclass in it's own method?在它自己的方法中增加 int 子类的实例?
【发布时间】:2013-05-12 18:36:02
【问题描述】:

我从 int 继承了一个类,我正在尝试创建一个方法来增加我的实例在方法中的值:

class MyInt(int):
    def my_method(self, value):
        #do_stuff()
        self += value

我知道你不能在方法内将 self 设置为其他任何东西,它肯定会在方法内发生变化,但实际实例不会改变。 但是,我不知道如何解决这个问题,以便实际实例会发生变化,那么它甚至可能吗?如果是,那么如何?

【问题讨论】:

  • 你想改变一个不可变的对象?
  • @snakesandcoffee 而是找到一种解决方法来实现类似于可变对象的行为...
  • “我从int 继承了一个类并且...”不!不要那样做!大多数时候,内置子类化是错误的做事方式。他们将来咬你(你可以看到他们已经开始了)。子类化内置是一种强大的力量,但强大的力量伴随着巨大的责任!!! (顺便说一句:AFAIK 你不能从 python 做你想做的事情。如果有办法肯定会很讨厌......)

标签: python class immutability increment addition


【解决方案1】:

似乎最好的办法是让 MyInt 不从 int 继承,而是将 int 存储在实例变量中。所以你会有一个 getValue() 方法和一个 setValue() 方法。

class MyInt()
    def __init__(self, value):
        self.value = value
    def getValue(self):
        return self.value
    def setValue(self, value):
        self.value = value

【讨论】:

  • 为什么要使用 getter 和 setter?这就是 Java 的做法。Python 有 @propertys。
  • @property 对于动态值也非常有用:)
猜你喜欢
  • 1970-01-01
  • 2011-12-24
  • 2022-12-12
  • 1970-01-01
  • 2015-11-11
  • 2015-04-21
  • 2017-02-27
  • 1970-01-01
  • 2011-07-13
相关资源
最近更新 更多