我正在尝试学习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:“浮动”对象不可调用
我不知道为什么。
答案 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属性或方法。