代码之家  ›  专栏  ›  技术社区  ›  W.tan

未定义Python类函数

  •  0
  • W.tan  · 技术社区  · 3 年前

    我正在创建一个包含函数的类, 但我不断收到错误“未定义名称‘direct_report’”

    基本上,我想制作一个组织结构图,使用direct_report功能创建一个列表,在每个职位下添加人员

    class employee:
    def __init__(self, name , title, salary):
        self.name = name
        self.title = title
        self.salary = salary
        self.direct_reports_list = direct_report()
    
    def __str__(self):
        #otheremp_list = []
        print(self.title,'-', self.name)
        print('Direct Reports:')
        for emp in self.direct_reports_list:
            print(emp.title,'-', emp.name)
        #    otheremp_list.append(emp.direct_reports_list)
        #print('other employees:')
        #for emp in otheremp_list:
        #    print(emp.title,'-', emp.name)
        #    otheremp_list.append(emp.direct_reports_list)
    
    def direct_report(self,value):
        print(value)
        direct_reports_list = []
        direct_reports_list.append(value)
        print(direct_reports_list)
        return direct_reports_list
    
    ceo = employee("Elon Musk", "CEO",1000000)
    devdir = employee("Jeff Bezos","Development Director",500000)
    devassoc1 = employee("Beyonce Knowles","Development Associate", 50000)
    devassoc2 = employee("Taylor Swift","Development Associate", 50000)
    ceo.direct_report(devdir)
    ceo.direct_report(devdir2)
    devdir.direct_report(devassoc1)
    devdir.direct_report(devassoc2)
    print(ceo)
    

    #是我打印完整组织结构图的进一步计划,但目前我仍停留在“直接报告”部分

    4 回复  |  直到 3 年前
        1
  •  0
  •   NALLAPANENIVENKATESH CHOWDARY    3 年前

    试试这个代码。

    class employee:
        def __init__(self, name , title, salary):
            self.name = name
            self.title = title
            self.salary = salary
            self.direct_reports_list = []
    
        def __str__(self):
            #otheremp_list = []
            print(self.title,'-', self.name)
            print('Direct Reports:')
            for emp in self.direct_reports_list:
                print(emp.title,'-', emp.name)
            #    otheremp_list.append(emp.direct_reports_list)
            #print('other employees:')
            #for emp in otheremp_list:
            #    print(emp.title,'-', emp.name)
            #    otheremp_list.append(emp.direct_reports_list)
            return "Done"
    
        def direct_report(self,value):
            self.direct_reports_list.append(value)
    
    ceo = employee("Elon Musk", "CEO",1000000)
    devdir = employee("Jeff Bezos","Development Director",500000)
    devassoc1 = employee("Beyonce Knowles","Development Associate", 50000)
    devassoc2 = employee("Taylor Swift","Development Associate", 50000)
    ceo.direct_report(devdir)
    devdir.direct_report(devassoc1)
    devdir.direct_report(devassoc2)
    print(ceo)
    print(devdir)
    print(devassoc1)
    print(devassoc2)
    
        2
  •  0
  •   Mohamed Mostafa    3 年前

    您需要为类方法添加一个缩进级别,如下所示:

    class employee:
        def __init__(self, name , title, salary):
            self.name = name
            self.title = title
            self.salary = salary
            self.direct_reports_list = direct_report()
    
        def __str__(self):
            #otheremp_list = []
            print(self.title,'-', self.name)
            print('Direct Reports:')
            for emp in self.direct_reports_list:
                print(emp.title,'-', emp.name)
            #    otheremp_list.append(emp.direct_reports_list)
            #print('other employees:')
            #for emp in otheremp_list:
            #    print(emp.title,'-', emp.name)
            #    otheremp_list.append(emp.direct_reports_list)
    
        def direct_report(self,value):
            print(value)
            direct_reports_list = []
            direct_reports_list.append(value)
            print(direct_reports_list)
            return direct_reports_list
    
    ceo = employee("Elon Musk", "CEO",1000000)
    devdir = employee("Jeff Bezos","Development Director",500000)
    devassoc1 = employee("Beyonce Knowles","Development Associate", 50000)
    devassoc2 = employee("Taylor Swift","Development Associate", 50000)
    ceo.direct_report(devdir)
    ceo.direct_report(devdir2)
    devdir.direct_report(devassoc1)
    devdir.direct_report(devassoc2)
    print(ceo)
    
        3
  •  0
  •   kibromhft    3 年前

    以这种方式调用函数。

    class employee:
        def __init__(self, name , title, salary):
            self.name = name
            self.title = title
            self.salary = salary
            self.direct_reports_list = self.direct_report()
    
        4
  •  0
  •   Will    3 年前

    尝试 self.direct_report() 而是在类中调用方法时