python类和实例组织

python类和实例组织,python,class,instance,Python,Class,Instance,我有一个类定义 class DataItem(object): """Elementary piece of data.""" 我想定义这个类的几个实例并将它们存储在某个地方。我希望我可以将diOne和diTwo定义为类DataItem的成员,并将它们存储在diOne.py和diTwo.py中的某个地方。但是,我希望在导入定义了DataItem的模块时,能够自动访问所有定义的实例 问题是,如何组织模块和实例文件?我想得对吗 编辑:为了充实我的意图 我希望有更多的代码来定义每个实例。我希

我有一个类定义

class DataItem(object):
    """Elementary piece of data."""
我想定义这个类的几个实例并将它们存储在某个地方。我希望我可以将diOne和diTwo定义为类DataItem的成员,并将它们存储在diOne.py和diTwo.py中的某个地方。但是,我希望在导入定义了DataItem的模块时,能够自动访问所有定义的实例

问题是,如何组织模块和实例文件?我想得对吗

编辑:为了充实我的意图

我希望有更多的代码来定义每个实例。我希望它们在单独的文件中,这样我可以更好/更容易地控制每个实例的版本,因为它们将有自己的生命。我可以很容易地在同一个模块中定义它们,但是当可能定义100多个实例时,更改模块和控制谁有权更改代码似乎是一个更大的麻烦。每一个都有不同程度的差异。挂起频率


我希望这能澄清问题

没有理由有单独的diOne/diTwo文件-它们几乎是空的。如果确实需要这样做,可以在定义类的文件中执行:

数据_item.py:

class DataItem(object):
    pass

di_one = DataItem()
di_two = DataItem()

现在,当您在任何位置执行导入数据项时,您将自动引用数据项.di\u one和数据项.di\u two——或者,您可以从数据项导入di\u one、di\u two执行
,直接引用它们。

没有理由有单独的diOne/diTwo文件——它们几乎是空的。如果确实需要这样做,可以在定义类的文件中执行:

数据_item.py:

class DataItem(object):
    pass

di_one = DataItem()
di_two = DataItem()

现在,当您在任何位置执行
导入数据项
操作时,您将自动引用
数据项.di\u one
数据项.di\u two
-或者,您可以从数据项导入di\u one,di\u two
执行
操作以直接引用它们。

我相信您可以执行如下操作。确保它们位于同一目录中。然后,您可以在instances.py中创建任意数量的实例(或具有相同结构的多个文件)。这回答了你的问题吗

MyClass.py

class DataItem(object):
    def __init__(self, v):
        self.value = v
实例.py

import MyClass

# Creates an instance of DataItem, and prints its value
diOne = MyClass.DataItem(1)
print diOne.value

我相信你可以像下面这样做。确保它们位于同一目录中。然后,您可以在instances.py中创建任意数量的实例(或具有相同结构的多个文件)。这回答了你的问题吗

MyClass.py

class DataItem(object):
    def __init__(self, v):
        self.value = v
实例.py

import MyClass

# Creates an instance of DataItem, and prints its value
diOne = MyClass.DataItem(1)
print diOne.value

你希望通过这样做来实现什么?听起来你的想法并不正确,但这个问题相当模糊。尤其是在一个文件中单独拥有一个实例并没有多大意义。而且,通常情况下,实例没有“很多代码”。可能需要一些代码来生成适当的参数来传递给构造函数,如果这是您的意思…但是如果您试图将不同的方法附加到每个实例,您可能需要的是类的两个子类(以及每个实例的一个子类),而不是类的两个实例。更一般地说,不是向我们展示一个粗略的,抽象示例,请给出一个具体示例,说明您希望类及其实例做什么(复杂到足以演示所有问题,但仅此而已)。@abarnert,我正试图进一步澄清我的问题,意识到您的评论是正确的。但要清楚一点,你是说我想要的是实例,应该是每个都有一个实例的子类?考虑到这一点,所有这些子类是否都应该存在于子目录中的单独文件中?我如何将它们全部导入?@piRSquared:如果不知道您所说的“定义每个实例的更多代码”是什么意思,我就不能说是或不是。您是指生成要传递给每个构造函数的参数的大量代码,还是指每个实例中有许多具有唯一代码的独立方法,或者完全不同的方法?您希望通过这样做实现什么?听起来你的想法并不正确,但这个问题相当模糊。尤其是在一个文件中单独拥有一个实例并没有多大意义。而且,通常情况下,实例没有“很多代码”。可能需要一些代码来生成适当的参数来传递给构造函数,如果这是您的意思…但是如果您试图将不同的方法附加到每个实例,您可能需要的是类的两个子类(以及每个实例的一个子类),而不是类的两个实例。更一般地说,不是向我们展示一个粗略的,抽象示例,请给出一个具体示例,说明您希望类及其实例做什么(复杂到足以演示所有问题,但仅此而已)。@abarnert,我正试图进一步澄清我的问题,意识到您的评论是正确的。但要清楚一点,你是说我想要的是实例,应该是每个都有一个实例的子类?考虑到这一点,所有这些子类是否都应该存在于子目录中的单独文件中?我如何将它们全部导入?@piRSquared:如果不知道您所说的“定义每个实例的更多代码”是什么意思,我就不能说是或不是。您是指生成要传递给每个构造函数的参数的大量代码,还是指在每个实例中有许多具有唯一代码的独立方法,或者完全不同的东西?为什么要创建一个class属性
,只是为了在
\uuuu init\uuuuu
方法中用一个同名的实例属性隐藏它?而不是添加一条注释说“这是不必要的”,只需从代码中删除该行即可。此外,您不需要在末尾附加“编辑:”内容。对于一个答案来说,准确地说出它应该有什么帮助比显示答案的历史记录更重要,特别是因为SO允许你这么做。对不起,我不确定编辑以包含其他用户的信息的礼仪