是什么原因导致“浮动”对象无法调用”

时间:2018-12-03 09:51:27

标签: python

我正在尝试学习opps python

class Employee:

    def __init__(self, fname, lnama, salary,):
        self.fname = fname
        self.lnama = lnama
        self.salary = salary
        self.increment = 1.5

    def increment(self):
        self.salary = self.salary * self.increment

harry = Employee('harry','jacson',44000)
manoj = Employee('manoj','pagal',76000)

print(harry.salary)   
harry.increment()

我得到以下错误:

  

44000     追溯(最近一次通话):       在第17行的文件“ classes.py”中         harry.increment()       TypeError:“浮动”对象不可调用

我不知道为什么。

4 个答案:

答案 0 :(得分:3)

问题来自于在您的self.increment中分配__init__并使用了self.increment()方法。您可以改用self._increment属性来解决此问题。

class Employee:

    def __init__(self, fname, lnama, salary,):
        self.fname = fname
        self.lnama = lnama
        self.salary = salary
        self._increment = 1.5

    def increment(self):
        self.salary = self.salary * self._increment

harry = Employee('harry','jacson',44000)
manoj = Employee('manoj','pagal',76000)

print(harry.salary)   
harry.increment()

答案 1 :(得分:0)

您的代码具有相同名称的变量和函数。您需要替换两个名称之一。

在您的代码上,increment是float类型的变量。

class Employee(object):

    def __init__(self, fname, lnama, salary):
        self.fname = fname
        self.lnama = lnama
        self.salary = salary
        self.increment = 1.5

    def get_increment(self):
        self.salary = self.salary * self.increment

harry = Employee('harry','jacson',44000)
manoj = Employee('manoj','pagal',76000)

print(harry.salary)   
harry.get_increment()

答案 2 :(得分:0)

在程序中增量是变量的名称以及与python模棱两可的成员函数。

您应该更改变量名或函数名。

答案 3 :(得分:0)

由于python函数是对象(提示:python中的所有都是对象),因此“数据”属性和“函数”(方法)属性没有明显的命名空间,因此您不能同时拥有方法和实例属性同名。在给定属性解析规则的情况下,instance属性优先于方法,因此harry.increment被解析为harry.__dict__["increment"](实例属性),而不是Employee.__dict__["increment"](方法)。

这里的解决方案非常简单:您必须重命名instance属性或方法。