【问题标题】:How do I return objects from a class without using the __str__ method?如何在不使用 __str__ 方法的情况下从类中返回对象?
【发布时间】:2020-05-02 02:04:49
【问题描述】:

我正在开发一个程序,该程序接收一个 CSV 文件并返回一个人口。该文件包含一个表格,其中包含人们的名字、姓氏和 5 个不同的特征(工作、社交、爱好、饮食、睡眠)。目前,我有一个 Person 类,它接受名字和姓氏作为字符串,特征作为字典。我还根据他们的特征分布来定义这个人是否有不平衡或平衡的生活。该类的 str 方法用于返回人是不平衡还是平衡,但我还需要创建一个名为人口对象的列表,但它返回的是不平衡或平衡每个人的状态。

class Person:
def __init__(self, first_name, last_name, traits):
    self.first_name = str(first_name)
    self.last_name = str(last_name)
    self.traits = traits
def determine_lifestyle(self):
    check = 0
    check2 = 0
    if(self.traits["Sleep"] != 0 and self.traits["Eat"] != 0):
        for val in self.traits.values():
            if(val == 3):
                check += 1
            if(val == 2):
                check2 += 1
    if(check >= 3 or check2 >= 3):
        return True
    else:
        return False
def __str__(self):
    if(self.determine_lifestyle()):
        return self.first_name + " " + self.last_name + " has a balanced lifestyle"
    else:
        return self.first_name + " " + self.last_name + " has an unbalanced lifestyle"
import csv
def read_file(filename):
    f = open(filename, 'r')
    population = []
    reader = csv.reader(f)
    next(reader)
    for row in reader:
        population.append((row[0],row[1],{"Work":row[2],"Hobbies":row[3],"Socialize":row[4],"Eat":row[5],
                                          "Sleep":row[6]}))
    return population

有没有什么方法可以不使用str方法返回person对象?

【问题讨论】:

  • __str__ 不返回人员对象,它用于在打印对象时提供字符串表示
  • 您的代码永远不会创建任何 Person 实例,因此不清楚您的问题出在哪里。也许您正在代码的其他部分这样做?看起来您要么想要一个比 __str__ 提供更多信息的 __repr__ 方法,要么您想要用更详细的东西替换 __str__ 并将您的平衡生活方式代码移动到另一个方法中。

标签: python


【解决方案1】:

您的代码似乎不完整,因为您的 population 变量保存的是元组,而不是 Person 对象实例。

如果您有Person 实例的列表,然后打印这些实例,它们的不平衡或平衡状态会显示出来,因为print 会打印实例的字符串表示,当您为该类定义 __str__() 方法时,表示将被覆盖。

有什么方法可以不使用 str 方法返回 person 对象?

如果你实例化一个Person 对象,比如aperson = Person(fname, lname, traits),那么你可以通过aperson.first_name, aperson.last_name 获取它的属性,并使用`aperson.determine_style 获取它的平衡状态

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多