2017-06-23 58 views
-1

我有问题,做一些验证和改变了get()方法的返回:类型错误对功能的方法/类属性

class Foo(object): 
    def __init__(self, turnNum=1): 
     self._turnNum = turnNum 

    def set_turnNum(self, turnNum): 
     self._turnNum = turnNum 

    def get_turnNum(self): 
     return self._turnNum 

但我发现了错误,每次我试图像时间:

num = Foo() 
num.set_turnNum(13) 
if num.get_turnNum % 2 == 0: 
    print('Not works after all...') 
    ... 

我得到这个错误信息:

TypeError: unsupported operand type(s) for %: 'method' and 'int' 

如果我尝试CONV ERT到int

num = Foo() 
num.set_turnNum(13) 
if int(num.get_turnNum) % 2 == 0: 
    print('Not works after all...') 
... 

然后我得到这个其他错误消息:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'method' 

可以看出,我与受保护的属性尝试。但是,为了DIY,我也尝试了公共和私人属性。不幸的是,在Pytohn 3.5.2和3.6.1中,我得到了相同的结果。

什么是在Python中这样做的正确方法?

+0

它不是一个属性,它是一个方法:'get_turnNum()'。您可能想查看['@ property'](https://docs.python.org/3/library/functions.html#property)装饰器。 –

回答

4

get_turnNum是一种方法,所以如果你做了num.get_turnNum它将返回一个绑定方法。您需要将其称为num.get_turnNum() - 注意()

或者,您可以使用装饰器@property

@property 
def turnNum(self): 
    return self._turnNum 

@turnNum.setter 
def turnNum(self, value): 
    self._turnNum = value 


num = Foo() 
num.turnNum = 13 
if num.turnNum % 2 == 0: 
    print('Working...') 
相关问题