Python 如何在预先创建的类中实现名称列表?

Python 如何在预先创建的类中实现名称列表?,python,list,class,object,Python,List,Class,Object,我有一个名为Name的类,它取名字和姓氏,并带有几个基本函数: class Name: def __init__(self, first, last): self._first = first self._last = last def first(self): return self._first def last(self): return self._last def __repre__(self): print("{} {}".format

我有一个名为Name的类,它取名字和姓氏,并带有几个基本函数:

class Name:

def __init__(self, first, last):
    self._first = first
    self._last = last

def first(self):
    return self._first

def last(self):
    return self._last

def __repre__(self):
    print("{} {}".format(self._first, self._last))
现在我需要创建一个函数,该函数接受一个列表,该列表返回一个名称对象列表。 Text_文件只是一个文本文件,它的名称逐行排列,名字和姓氏之间有一个空格

def name_list(text_file):

  with open(text_file) as f:
      lines = f.read().splitlines()
      for name in lines:
          print(lines)
我意识到我只获取了列表并返回了列表中的名称,而不是作为名称对象的列表

如何使用类返回名称对象列表

def name_list(text_file):
    file = open(text_file, 'r')
    list = []
    for line in file:
        first, last = line.split()
        list.append(Name(first, last))
    return list
这将循环遍历每一行,在空格中拆分,创建一个name对象,将其添加到列表中,然后返回列表

然后,要将其打印出来,请执行以下操作:

list = name_list(file)
for name in list:
    print('Name: {0} {1}'.format(name._first, name._last))

最简单的方法就是在空白处分割每一行。上面有一些多余的东西:你可以简单地迭代一个文件,在其中逐行遍历——不需要调用readlines

def name_list(text_file):
    names = []
    with open(text_file) as f:
        for line in f:
             first_name, last_name in line.split(' ')  # tuple unpacking
             names.append(Name(first_name, last_name))
    return names

我认为在Python中以一行程序的形式展示如何做到这一点可能很酷。我理解,对于新手来说,这可能不太容易理解,因此,可能不应该是公认的答案,但值得知道:

>>> names = [Name(*line.split()) for line in open(text_file)]

基本上,我们迭代文本文件中的每一行,在空白处拆分,然后使用
*
-运算符将值作为位置参数解压缩到类中。

还有一种可能的解决方案:

name_objects = list()
with open(text_file) as f:
      for each_line in f:
          name_objects.append(Name(each_line.split()))

风格提示:您的
first
last
方法是多余的。Python不支持getter和setter,而是鼓励您直接访问属性。只需在
\uuu init\uuuu
方法中执行
self.first=first
self.last=last
,然后就可以使用它了。至于我的代码是多余的,我应该怎么做呢?在我们的课堂上,我们被教导在构造器中使用“.”我应该不使用getter和setter吗?如果是这样,为什么不呢?虽然不是我说的,但python无法隐藏类成员(至少我知道)。因此,人们会使用“_”来表示这个变量是私有的,不应该在setter方法之外进行修改。所以在Python中,根据我收集的信息,我们只直接使用成员,而不使用setter和getter,因为没有“private”变量。因此,您不应该使用您拥有的最后一个和第一个函数,而应该直接使用成员,如我的示例中所示。如果您这样做,我建议删除下划线。@AlexLee-是一篇关于为什么Python中getter和setter不好的文章。基本上,它们没有任何作用。正如RNikoopour所说,用户仍然可以直接完全绕过您的方法来更改自己。因此,他们所做的只是使代码臃肿,难以遵循,效率低下。此外,它们破坏了Python的“我们都是同意的成年人”原则;应该允许用户随意更改任何属性。试图将它们隐藏在方法背后是不明智的。