无限调用python类变量

问题描述

所以,我对 Python 还很陌生,我正在努力学习 OOP 范式在那里是如何工作的。 在这个阶段让我感到困惑的一件事是类变量。更具体地说,请考虑取自 Dusty Phillips 所著 Python 3 Object-Oriented Programming 一书中的以下示例(第 3 章 - 当对象相似时):

class Contact:
    all_contacts = []

    def __init__(self,name,email):
        self.name = name
        self.email = email
        Contact.all_contacts.append(self)

因此,这里我们看到一个简单的类示例,该类具有类变量 all_contacts,它是一个空列表。除此之外还有两个实例变量,nameemail。 现在,如果我们要创建类 Contact 的两个不同实例,例如

c1 = Contact('John','john@gmail.com')
c2 = Contact('Mark','mark@yahoo.com')

我们可以通过两种方式访问​​属性 nameemail,即

  1. c1.name
  2. c1.all_contacts[0].name

但这就是我遇到问题的地方 - all_contacts一个类变量,这意味着它对类 Contact 的所有实例都是通用的。它不仅适用于所有实例,而且由于此列表的填充方式,没有什么可以阻止我这样做: c1.all_contacts[1].name 这为我提供了实例 namec2 属性。 事实上,似乎我可以随心所欲地深入: c1.all.contacts[0].all_contacts[1].all_contacts[0]... 换句话说,我担心如果在 Python 中我们有一个带有类变量作为列表的类,然后在初始化方法中我们将 self 存储到该列表中,那么我们是否会创建一个可以无限引用自身的结构次?有什么解决方法吗?

如果有人能对这种行为发表评论,我将不胜感激。

亲切的问候

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...