Python对象在对象引用上返回整数/浮点

2024-09-20 23:03:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一节课:

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中可用吗?你知道吗


Tags: 对象方法selfreturnobjectinitdefrandom
1条回答
网友
1楼 · 发布于 2024-09-20 23:03:14

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
>>> 

相关问题 更多 >

    热门问题