2017-09-06 21 views
0

函数my_func,并将得到一个说法,这可能是整数或类:Python - 如何显式更改对类对象的评估?

class SomeClass: 
    val = 0 
    def __init__(self): 
     self.val = 0 
    def set(self, val): 
     self.val = val 
    def get(self): 
     return self.val 

,我想用这两种类型的一个工作。 我可以以某种方式明确告诉Python,SomeClass对象的评估应该返回对象的val字段,但不返回它自己的对象。

这意味着获得下面的代码工作(在某种程度上):

s = SomeClass() 
s.set(3) 
test = s # this line should assign value 3(int) to test 
test # prints 3 

回答

0

不是真的,不,不,你似乎要求广义上。您可以重载许多操作,而不是分配。这是因为变量只是对对象的引用,并且没有附加类型。在任何时候都可以有很多对你的对象的引用。重要的是你如何使用对象,而不是你指定的对象。

相反,我会让你的班级转换成一个整数。你可以用object.__int__ hook这样做;您的二传手会显式调用的对象上int()传入:

class SomeClass: 
    val = 0 
    def __init__(self): 
     self.val = 0 
    def set(self, val): 
     self.val = int(val) 
    def get(self): 
     return self.val 
    def __int__(self): 
     return self.val 

如果你总是使用在整数运算这些对象,你可以添加这些行动挂钩,如object.__add__object.__sub__;再次,它是使用对象的上下文。

+0

感谢Martijn,似乎覆盖__int__方法是我所需要的。 如果我ARG1可能是或实施__int__方法整数或SomeClass的对象,所以,如果我做的: my_arg = INT(ARG1) 无论如何,我会得到的整数值,然后我可以只my_arg操作。 –