anonymous
anonymous

Reputation: 143

not defined error in python while using class

I'm a beginner and i have been trying to get employee leave management data from user input of 'n' employees using class function.

Here are my codes to get n inputs from user for employee leave management

class Employee:
    n=int(raw_input("Pls enter the number of employees:"))

def __init__(self, name, idno, leavetaken, leavereqd, reason):

    self.name=name
    self.idno=idno
    self.leavetaken=leavetaken
    self.leavereqd=leavereqd
    self.reason=reason

    def Employee(self):
        print("name:", self.name,", idno:", self.idno, ", leavetaken:", self.leavetaken,", leavereqd:", self.leavereqd,", reason:", self.reason)

print "Employee.name:", Employee.name             
print "Employee.idno:", Employee.idno
print "Employee.leavetaken:", Employee.leavetaken
print "Employee.leavereqd:", Employee.leavereqd
print "Employee.reason:", Employee.reason

Upvotes: 1

Views: 1504

Answers (2)

Yohanes Gultom
Yohanes Gultom

Reputation: 3842

Are you trying to do something like this?

class Employee:
    def __init__(self, name, idno, leavetaken, leavereqd, reason):
        self.name = name
        self.idno = idno
        self.leavetaken = leavetaken
        self.leavereqd = leavereqd
        self.reason = reason

    def __str__(self):
        return "Name: {}\nID No:{}\nLeave Taken: {}\nLeave Requested: {}\nLeave Reason: {}\n".format(self.name, self.idno, self.leavetaken, self.leavereqd, self.reason)

n = int(raw_input("Please enter the number of employees: "))
employees = []

# capture employee leave requests from input
for i in range(n):
    print("\n({} of {})".format(i + 1, n))
    employee = Employee(
        raw_input("Employee name: ") or "employee".format(i + 1),
        raw_input("Employee ID no: ") or str(i + 1),
        int(raw_input("Employee leave taken: ") or "0"),
        int(raw_input("Employee leave requested: ") or "0"),
        raw_input("Employee leave reason: ") or "No reason"
    )
    employees.append(employee)
print("\n")

# print captured leave requests
print("Employee leave requests:")
for employee in employees:
    print(employee)

Upvotes: 1

Den1al
Den1al

Reputation: 647

You are defining "Employee" twice; once as a class and then as a function. When you're trying to access the __name__ attribute of "Employee" you accessing the function's attribute rather than the class's one (that's why the __name__ succeeded while __idno__ fails).

Upvotes: 0

Related Questions