Python对象在对象引用上返回integer / float

时间:2018-01-22 20:50:48

标签: python oop object reference

我有一个类似的课程:

class NumberGenerator(object):
    def __init__(self, seed=0):
       random.seed(seed)
       self.current = random.random()

    def __next__(self):
        self.next()

    def next(self):
        self.current = random.random()
        return self.current

理想情况下,我希望通过一些神奇的方法(如果可用)来执行以下操作。

>>> numGen = NumberGenerator(99)
>>> numGen.next()
0.15
>>> numGen + 2
2.15

我知道__str____repr__以及__add__等等。但我想要的是一个魔术方法,只要引用对象而不是指向对象的指针,就会返回一些东西。我保证,我不会将另一个变量分配给对象引用,下游。这在Python中可用吗?

1 个答案:

答案 0 :(得分:3)

Python语言不包含指针。您可以将Python中的变量视为对某个对象的引用。使用变量时,您正在访问变量所指的对象

您希望NumberGenerator类拥有的行为可以通过实施__add__魔法来实现。这是当+运算符与表达式左侧的类实例一起使用时Python调用的方法。换句话说:

numGen + 2

翻译为:

numGen.__add__(2) 

请注意,如果您想使用+运算符而不管您的类实例所在的表达式的哪一侧,您还需要实现__radd__魔术方法:

class NumberGenerator(object):
    def __init__(self, seed=0):
       random.seed(seed)
       self.current = random.random()

    def __next__(self):
        self.next()

    def next(self):
        self.current = random.random()
        return self.current

    def __add__(self, value):
        return self.current + value

    def __radd__(self, value):
        return self.__add__(value)

以下是正在使用的类的示例:

>>> numGen = NumberGenerator(99)
>>> numGen.next()
0.20007544457494542
>>> numGen + 2
2.2000754445749453
>>> 2 + numGen
2.2000754445749453
>>>