无法访问对象成员变量

问题描述 投票:0回答:1

我是python的新手,面临一个奇怪的错误。 我的演示的基本思想是在python中执行“构造函数重载”,类似于其他编程语言。我有两个文件,一个文件只包含类,另一个文件创建类的对象。

employee.朋友

class Employee:
  def displayEmployee(self):
    print("Name : ", self.emp_name,  ", Salary: ", self.salary)

  def __init__(self,id=None,salary=None,emp_name=None):
      print("Constructing MyClass")
      if(id is None):
        self.id=101
      else:
        self.id = id
      if(salary is None):
        self.salary=20000
      else:
        self.salary = salary
      if(emp_name is None):
        self.emp_name="Default"
      else:
        self.emp_name = emp_name

runner.朋友

from employee import Employee

emp1 = Employee()
emp2 = Employee(1,3000,"Abcd")

emp1.displayEmployee();
emp2.displayEmployee();

但是,现在我面临一个错误

Traceback (most recent call last):
File "runner.py", line 7, in <module>
  emp2.displayEmployee();
File "D:\python\Demo\employee.py", line 3, in displayEmployee
  print("Name : ", self.emp_name,  ", Salary: ", self.salary)
AttributeError: 'Employee' object has no attribute 'emp_name'

这意味着我无法在同一个类的函数中访问该类的任何成员变量。对于其他编程语言,这对我来说非常令人费解。 我做错了什么还是这个设计?

更新:

根据建议,我已将python文件更新为以下内容。但是,我仍然面临同样的错误,下面也给出了相同的错误。

employee.朋友

class Employee:
  def displayEmployee(self):
    print("Name : ", self.emp_name,  ", Salary: ", self.salary)

def __init__(self, id=101, salary=20000, emp_name="Default"):
    print("Constructing MyClass")
    self.id = id
    self.salary = salary
    self.emp_name = emp_name

runner.朋友

from employee import Employee

emp1 = Employee()
emp1.displayEmployee();

错误:

Traceback (most recent call last):
  File "runner.py", line 6, in <module>
    emp1.displayEmployee();
  File "D:\python\Demo\employee.py", line 3, in displayEmployee
    print("Name : ", self.emp_name,  ", Salary: ", self.salary)
AttributeError: 'Employee' object has no attribute 'emp_name'
python oop constructor
1个回答
2
投票

如果您传递的参数不是None,则它们永远不会被指定为self的属性。您可以修改__init__以简单地提供默认值,然后将它们作为属性分配给您的类

def __init__(self, id=101, salary=20000, emp_name="Default"):
    print("Constructing MyClass")
    self.id = id
    self.salary = salary
    self.emp_name = emp_name
© www.soinside.com 2019 - 2024. All rights reserved.