【问题标题】:Mutable variable in a class类中的可变变量
【发布时间】:2017-12-02 22:43:34
【问题描述】:

如果我有这样的课程。

class Person():

def __init__(self, name):
    self._name = name
    self._name_list = []
    if(self._name not in self._name_list):
        self._name_list.append(self._name)
father = Person("Michael")
mother = Person("Sharon")
>>>self._name_list

["Michael", "Sharon"]

如何在不创建全局变量的情况下做到这一点?每次我实例化一个新人时,它都会创建他们自己的列表。但是我需要一个在每次创建新人时附加名称的类范围内的列表。

【问题讨论】:

  • 不要这样做。一个类不应依赖于创建实例的方式和原因。

标签: python list class global


【解决方案1】:

您可以将其保存在类本身中,如下所示:

class Person():
    _name_list = []

    def __init__(self, name):
        self._name = name
        if self._name not in self._name_list:
            self._name_list.append(self._name)

father = Person("Michael")
mother = Person("Sharon")

print(Person._name_list)

输出:

['Michael', 'Sharon']

【讨论】:

  • 但是请注意,这本质上是一个全局变量。如果您不想拥有全局变量,则需要在单独的类中管理列表,该类提供 new_person() 方法或类似方法,该方法返回一个新的 Person 并将其添加到列表中。 (另请注意,您可能希望使用集合而不是列表。)
  • 等等...你怎么没有添加self。创建列表时,但您可以使用 self._name_list 访问名称列表
  • 将人员存储在名为Person(单数)的类中的类变量中似乎是一个相当糟糕的主意。创建一个新对象来存储Person对象的集合有什么问题
  • @user13123 因为实例可以访问类命名空间
  • 谁能回答我的问题?
【解决方案2】:

你可以试试这个:

people = []
class Person():
   def __init__(self, name):
       self._name = name
       if self._name not in people:
           global people
           people.append(self._name)

person = Person('name1')
person1 = Person('name2')
print(people)

输出:

['name1', 'name2']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 2017-11-17
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多