【问题标题】:builtins.TypeError: unsupported operand type(s) for *: 'int' and 'method'builtins.TypeError: *: 'int' 和 'method' 的不支持的操作数类型
【发布时间】:2018-08-13 18:14:38
【问题描述】:

我正在编写一些 YouTube 教程中的代码,但一直遇到类型错误。为什么?

class Employee():
    ''' keeps track of company employees'''

    raise_amount = 1.04

    def __init__(self, first, last, pay):
        self.first = first
        self.last = last
        self.pay = pay 
        self.email = last + '.' + first +'@tech.com'

    def fullname(self):
        return self.first +' ' + self.last

    def Email(self): #not needed bc its already an attribute 
        return self.email 

    def raise_amount(self):
        return ((self.pay * self.raise_amount) - self.pay)    

    def annual_raise(self):
        self.pay = int(self.pay * self.raise_amount)
        return pay 

【问题讨论】:

  • 您不能将raise_amount 同时作为方法名和属性名。
  • 我不敢相信我没有注意到这一点,非常感谢!

标签: python-3.x class typeerror


【解决方案1】:
class Employee():
    ''' keeps track of company employees'''

    raise_amount = 1.04

    def __init__(self, first, last, pay):
        self.first = first
        self.last = last
        self.pay = pay
        self.email = last + '.' + first +'@tech.com'

    def fullname(self):
        return self.first +' ' + self.last

    def Email(self): #not needed bc its already an attribute
        return self.email

    def raise_amount(self):
        return ((self.pay * self.raise_amount) - self.pay)

    def annual_raise(self):
        self.pay = int(self.pay * self.raise_amount)
        return pay

emp_1 =Employee("Joshua", "Ozoya", 9000)

print(emp_1.fullname())




your programme is running fine.

emp_1 =Employee("Joshua", "Ozoya", 9000)

print(emp_1.fullname())

添加这两行代码得到结果。

另外,请说明您遇到的错误。

【讨论】:

  • 欢迎来到 SO。请修正您的格式。另外,请注意这个问题已经在 cmets 中得到了回答。最后,为了表明您的提案解决了问题,请说明您的代码做了什么以及它如何解决问题。
【解决方案2】:

在这里,您为方法和类变量使用了相同的名称raise_amount。当你执行下面的代码时

 def raise_amount(self):
        return ((self.pay * self.raise_amount) - self.pay) 

self.raise_amount 将指向方法raise_amount。所以乘法运算失败,因为它期望它的参数是数字。您可以更改类变量名称或方法名称。

如果要更改类变量名称,请更改代码如下:

raise_amount_value = 1.04

方法内部:

def raise_amount(self):
    return ((self.pay * self.raise_amount_value) - self.pay)

def annual_raise(self):
    self.pay = int(self.pay * self.raise_amount_value)
    return pay

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多