【问题标题】:Python 2.7 How can I access objects created by one class from a list stored within a different classPython 2.7 如何从存储在不同类中的列表中访问由一个类创建的对象
【发布时间】:2017-08-31 10:09:24
【问题描述】:

我正在尝试创建一个 User 类来存储有关用户的某些属性,以及另一个 User_Review 类,其中包含由 User 类创建的对象/实例的列表。

class User(object):
    user_objects = []
    def __init__(self, name, age)
        self.name = name
        self.age = age
        User.user_objects.append(self)

class User_Review(User):
    user_list = # here is where I want user_objects to exist

user1 = User('leila', 23)
user2 = User('carter', 43)

# so user_list = [user1, user2]

回答 zondo 和 juanpa.arrivillaga,User 的目的是创建具有基本信息的对象,而 User_Review 是我希望能够通过 User_Review 中的其他方法对用户列表进行操作的方法类,例如具有将用户添加/删除到用户列表末尾的方法,或显示某些信息(例如,仅名称)。

【问题讨论】:

  • 你可以做user_list = User.user_objects,但是为什么你想要两个引用同一个东西呢?
  • 为什么User_Review 派生自User?为什么要使用自定义类,而不仅仅是使用list???

标签: python python-2.7 list class inheritance


【解决方案1】:

出于您的目的,我认为您可以不用在类中同时创建 user_objectsuser_list 列表,而只需在 User_Review 中保留一个(因为您希望将它们的引用存储在另一个类中),并摆脱 User 内部的那个,同时将创建的 User 对象从 __init__ 方法内部而不是 user_objects 附加到 user_list

实际上,这看起来像下面这样。

class User(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age
        User_Review.user_list.append(self)

class User_Review(object):
    user_list = []

user1 = User('leila', 23)
user2 = User('carter', 43)

使用print(User_Review.user_list[0].name) 打印出第一个用户的名称正确输出carter


然而,这种方法似乎相当违反直觉:

  • User_Review 类继承了 User,这对我来说没有任何逻辑意义,因为如果它恰好在User。但是,您希望能够访问每个 User 对象中的数据,这可以通过访问列表中所需的 User 来实现。

  • 就目前而言,User_Review 没有真正的用途,只需一个常规列表就可以实现完全相同的目的;但是,如果计划实施依赖来自创建的多个或所有 User 对象的数据的方法,那么这可能是一个可行的解决方案。

此问题的其他解决方案可能是仅在 User 类中创建列表,并仅使用 User_Review 访问该列表并执行所需的操作。或者更复杂的是,从这两个类中创建一个单独的类,专门用于在数据库中存储、组织和检索用户。

【讨论】:

  • 感谢您的清晰解释!我对这两个类如何相互关联有了更好的理解,现在意识到User_Review 不需要继承User,这让事情变得更简单。
  • 太棒了!我建议阅读更多有关面向对象编程的内容,以熟悉继承以及对象和其他非原始值如何存储在内存中,此外,您可能会遇到其他有用的东西来学习,例如多态性和封装以及未来开发任何可用系统所需的所有其他花哨的词。祝你好运!
猜你喜欢
  • 2020-02-17
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
相关资源
最近更新 更多