未在visual studio上定义名称

2024-04-26 03:07:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Visual Studio运行py文件。我是OOP新手,所以调试这个问题很困难。它表示名称“mng”未定义,“Manager”对象没有属性“salary”。我应该如何解决这个问题

class Employee:
    MIN_SALARY = 30000
    def __init__(self, name, salary=MIN_SALARY):
        self.name = name
        if self.salary >= Employee.MIN_SALARY:
            self.salary = Employee.salary
        else:
            self.salary = Employee.MIN_SALARY

    def give_raise(self, amount):
        self.salary += amount

class Manager(Employee):
    def display(self):
        return print("Manager", self.name)

mng = Manager("Debbie Lashko", 86500)
print(mng.name)
mng.display()

>>> mng = Manager("Debbie Lashko", 86500)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in __init__
AttributeError: 'Manager' object has no attribute 'salary'
>>> print(mng.name)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'mng' is not defined
>>> mng.display()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'mng' is not defined

Tags: nameinselfdefdisplaystdinlineemployee
2条回答

这段代码有一些问题。 但是,您的错误可以通过以下方法解决:

class Employee:
    MIN_SALARY = 30000

    def __init__(self, name, salary=MIN_SALARY):
        self.name = name

        if salary >= Employee.MIN_SALARY:

self.salary在比较之前未声明。所以,经理还没有self.salary。在if语句中只使用salary

在使用属性之前,必须将某些内容分配给属性。只要稍微改变一下你的逻辑

    def __init__(self, name, salary=MIN_SALARY):
        self.name = name
        self.salary = salary
        if self.salary < Employee.MIN_SALARY:
            self.salary = Employee.MIN_SALARY

或者您可以使用conditional expression

    def __init__(self, name, salary=MIN_SALARY):
        self.name = name
        self.salary = salary if salary >= Employee.MIN_SALARY else Employee.MIN_SALARY

相关问题 更多 >

    热门问题