python - 用实例方法中的 float 替换实例?

标签 python class types python-2.7

我正在编写一个 Python 脚本来解析一些数据。目前我正在尝试制作一个创建“占位符”对象的类。我打算重复传递每个“占位符”变量,最后把它变成一个字典、 float 、列表或字符串。由于需要花一些时间来描述的原因,如果我可以通过调用方法来替换实例会容易得多。

这是一个简单的例子

class Event( dict ):

    def __init__( self ):

        self.sumA = 0.0
        self.sumB = 0.0

    def augmentA( self, i ):

        self.sumA += i

    def augmentB( self, i ):

        self.sumB += i

    def seal( self ):

        if self.sumA != 0 and self.sumB != 0:
            self = [ sumA, sumB ]

        elif self.sumA != 0:
            self = float( sumA )

        elif self.sumB != 0:
            self = float( sumB )

我想做的是:

e = Event()
e.augmentA( 1 )
e.augmentA( 2 )
e.seal()

...并将“e”变成一个 float 。

我希望避免的是:

e = Event()
e.augmentA( 1 )
e.augmentA( 2 )
e = e.getSealedValue()

我完全理解我的“seal”方法中的“self”只是一个局部变量,不会对作用域外的实例产生任何影响。但是,我不确定如何从实例中实现我想要的,这对我的代码来说是最方便的。我也知道我可以覆盖所有内置插件(getItemtoStr),但这会使我的代码复杂化很多。

我是 Python 菜鸟,所以我不确定这是否可行。请放纵我:)

最佳答案

在某些情况下,Python 允许您即时更改对象的类。但是,any 对象不能转换为any 类,如以下示例所示(添加换行符以提高可读性):

>>> class A(object):
...   pass
...
>>> class B(object):
...   pass
...
>>> a = A()
>>> type(a)
<class '__main__.A'>

>>> a.__class__ = B
>>> type(a)
<class '__main__.B'>

>>> a.__class__ = int
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __class__ assignment: only for heap types

(我不清楚具体的规则,但是如果你的类使用 __slots__ 例如它们必须兼容才能进行转换)

但是,正如其他回答者所指出的那样,通常这样做是一个非常糟糕的主意,即使有一种方法可以将对一个对象的每个引用都转换为对另一个对象的引用。不过,我不会说从不那样做,这种技术可能有合法用途(例如,我认为它是实现 State Design Pattern 的一种简单方法,不会造成不必要的困惑).

关于python - 用实例方法中的 float 替换实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11919780/

相关文章:

delphi - delphi中的单位与其他语言中的类相同吗?

python - 复制一行搞砸了 pandas 列数据类型,如何避免?

c# - 字符串未被识别为有效的日期时间 "format dd/MM/yyyy"

perl - 如何在perl中对对象进行散列

python - 如何拟合数据集以便它们共享一些(但不是全部)参数值

python - 如何从DataFrame的rank方法中获取整数而不是 float

python - numpy block 科学记数法

java - 如何从不同的类在 jtextarea 上打印文本消息

typescript - 为什么两个接口(interface)的联合与联合的接口(interface)不同(具体涉及我下面的示例)?

python - Django REST Framework 嵌套资源 key "id"无法访问