Python setter TypeError:“int”对象不可调用

Mut*_*shi 3 python oop object getter-setter

我正在尝试为我的私人 self.__food 变量创建一个设置器。基本上我希望子类 Tiger 更改私有变量,该变量有一个限制值超过 100 的条件。但是我收到错误: TypeError: 'int' object is not callable

我哪里错了,我该如何解决这个问题?谢谢

class Animal:
    def __init__(self,foodamount=10, location = 'Australia'):
        self.__food = foodamount
        self.location = location

    @property
    def foodamt(self):
        return self.__food

    @foodamt.setter
    def foodsetter(self, foodamount):
        if self.__food >100:
            self.__food = 100
        else: self.__food = foodamount


class Tiger(Animal):
    def __init__(self,colour = 'orange'):
        super().__init__(location ='programming and gaming')
        self.colour = colour


an = Tiger()
an.colour='red'
print(an.colour)
ansetfood = an.foodsetter(1000)
print(ansetfood)
Run Code Online (Sandbox Code Playgroud)

Kev*_*vin 6

我看到几个问题。

  • 使用属性时,您不必手动调用 setter 的名称,例如an.foodsetter(1000). 您使用属性分配语法,例如an.foodamt = 1000. 这就是属性的全部要点:具有透明的类似属性的语法,同时仍然具有类似函数的行为。
  • 你应该foodamount与 100 进行比较,而不是self.__food.
  • 属性的 getter 和 setter 应该具有相同的名称。

 

class Animal:
    def __init__(self,foodamount=10, location = 'Australia'):
        self.__food = foodamount
        self.location = location

    @property
    def foodamt(self):
        return self.__food

    @foodamt.setter
    def foodamt(self, foodamount):
        if foodamount >100:
            self.__food = 100
        else: self.__food = foodamount


class Tiger(Animal):
    def __init__(self,colour = 'orange'):
        super().__init__(location ='programming and gaming')
        self.colour = colour


an = Animal()
an.colour='red'
print(an.colour)
an.foodamt = 1000
print(an.foodamt)
Run Code Online (Sandbox Code Playgroud)

结果:

red
100
Run Code Online (Sandbox Code Playgroud)