Python Class Printing Information Issue

Gokberk :

I tried to create a basic class example by myself. However, I get an error from line 51 that I mentioned by #ERROR next to the code. Error information given below. Also, if I try to get info by show_info from worker class, there is no error on program. I couldn't understand tha reason of that situation.

Can you help me about how to solve the problem. Thank you to all I'm begginer for coding. Sorry if the main issue is so basic.

class worker():

    def __init__(self, name, salary, department):
        print("__init__ function of worker class.")
        self.name = name
        self.salary = salary
        self.department = department

    def show_info_worker(self):
        print("show_info function of worker class")
        print("""Name: {}\nSalary: {}\nDepartment: {}""".format(self.name, self.salary, self.department))

    def change_depart(self, new_depart):
        print("change_depart function of worker class")
        self.department = new_depart



class manager(worker):

    def __init__(self, name, salary, department, responsibilty):
        # super() function takes input from worker class
        super().__init__(name, salary, department)
        print("__init function of manager class")
        self.responsibilty = responsibilty

    def show_info_manager(self):
        print("show_info function of manager class")
        return """Name: {}\nSalary: {}\nDepartment: {}\nResponsibility: {}""".format(self.name, self.salary,
                                                                                    self.department,
                                                                                    self.responsibilty)

    def raise_salary(self, increase_salary):
        print("raise_salary function of manager class")
        self.salary += increase_salary


employee_name = input("Please Enter Employee Name: ")
employee_salary = input("Please Enter Employee Salary: ")
employee_department = input("Please Enter Employee Department: ")
while True:
    check_manager = int(input("""Please Select the Position of Employee\n1. Worker\n2. Manager"""))
    if check_manager == 1:
        worker1 = worker(employee_name, employee_salary, employee_department)
        worker1.show_info_worker()
        break
    elif check_manager == 2:
        manager_responsibility = input("Please Enter Manager Responsibility: ")
        manager1 = manager(employee_name, employee_salary, employee_department, manager_responsibility)
        manager1 = manager.show_info_manager()  # <-- ERROR!!!
        break
    else:
        print("Please Enter a Proper Value...")

Error is given below.

manager1 = manager.show_info_manager()
TypeError: show_info_manager() missing 1 required positional argument: 'self'
Saimon :

You messed up something in your code which I corrected. You were trying to call the show_info_manager() on manager1 instance in the wrong way.

class worker():

    def __init__(self, name, salary, department):
        print("__init__ function of worker class.")
        self.name = name
        self.salary = salary
        self.department = department

    def show_info_worker(self):
        print("show_info function of worker class")
        print("""Name: {}\nSalary: {}\nDepartment: {}""".format(self.name, self.salary, self.department))

    def change_depart(self, new_depart):
        print("change_depart function of worker class")
        self.department = new_depart



class manager(worker):

    def __init__(self, name, salary, department, responsibilty):
        # super() function takes input from worker class
        super().__init__(name, salary, department)
        print("__init function of manager class")
        self.responsibilty = responsibilty

    def show_info_manager(self):
        print("show_info function of manager class")
        return """Name: {}\nSalary: {}\nDepartment: {}\nResponsibility: {}""".format(self.name, self.salary,
                                                                                    self.department,
                                                                                    self.responsibilty)

    def raise_salary(self, increase_salary):
        print("raise_salary function of manager class")
        self.salary += increase_salary


employee_name = input("Please Enter Employee Name: ")
employee_salary = input("Please Enter Employee Salary: ")
employee_department = input("Please Enter Employee Department: ")
while True:
    check_manager = int(input("""Please Select the Position of Employee\n1. Worker\n2. Manager"""))
    if check_manager == 1:
        worker1 = worker(employee_name, employee_salary, employee_department)
        worker1.show_info_worker()
        break
    elif check_manager == 2:
        manager_responsibility = input("Please Enter Manager Responsibility: ")
        manager1 = manager(employee_name, employee_salary, employee_department, manager_responsibility)
        manager1.show_info_manager()  # Corrected
        break
    else:
        print("Please Enter a Proper Value...")

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=383585&siteId=1