首页 > 解决方案 > 传递了一个对象而不是对象的属性?

问题描述

有两个类 -CompanyProjectCompany对象具有projects列表属性,应指示添加到公司的Project实例列表这是将项目添加到公司的类和方法的实现:

class Company(object):
def __init__(self, companyname):
    self.companyname = companyname
    self.projects = list()

def show_projects(self):
    print(f"Company projects: {self.projects}")

def add_project(self, name):
    return self.projects.append(Project(name))


class Project(object):
    def __init__(self, name):
        self.name = name

但是当我尝试初始化公司,然后项目并将其添加到公司时,添加 add_project 返回的不是project.name,而是对象本身,所以即输出:

firm = Company("New")
first = Project("first")
print(first.name)
firm.add_project(first.name)
firm.show_projects()

将会:

first
Company projects: [<__main__.Project object at 0x00A54170>]

为什么它传递的不是名称,而是对象本身?无法找出这里缺少什么。

标签: pythonclassoopobject-composition

解决方案


firm.projects是一个列表,因此show_projects当您打印它时,它将是一个对象列表。一种解决方案是先修改show_projects以将列表格式化为逗号分隔的字符串:

def show_projects(self):
    formatted_projects = ','.join([p.name for p in self.projects])
    print(f"Company projects: {formatted_projects}")

推荐阅读