我有一个类似的课程:
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中可用吗?
答案 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
>>>