对使用Python导入对象的约定有疑问吗?

假设我在〜/ app /中有一个项目,至少包含文件myclass.py,myobject.py和app.py。

在myclass.py中,我有类似的东西

def myclass():
    # class attributes and methods...

myobject.py中,我有类似的东西

from app import myclass
attribute1 = 1
attribute2 = 2
myobject = myclass(attribute1,attribute2)

最后,app.py看起来像

from app import myobject
# do stuff with myobject

在实践中,我正在使用myobject.py来收集myclass的公共实例并使其易于导入,因此不必单独定义所有属性。我的问题是关于myobject.py的约定。这样可以吗?或者有什么更好的方法可以达到上述目的。我想到的问题是在myobject模块中还有所有其他变量(在本例中为attribute1和attribute2)。感觉有点不可思议,因为这些不是要单独访问的东西,而是可以访问的事实……我觉得还有其他常规方法可以做到。这是完全可以的吗?还是我应该担心(如果可以的话,如何解决)?

编辑:为了更加清楚,这是一个示例:我有一个Camera类,用于存储镜头和ccd等属性(例如,在myclass.py中)。因此,用户能够定义不同的摄像机并在应用程序中使用它们。但是,我希望允许它们具有一些预设的摄像机,因此我定义了Camera类的对象,这些对象特定于某些我知道用于此应用程序的摄像机(例如,在myobject.py中)。因此,当他们运行应用程序时,他们可以仅导入这些预设摄像机(作为Camera对象)(例如在app.py中)。如果最好的方式不是写在myobject.py中,应该如何编写这些预设对象?

iCMS 回答:对使用Python导入对象的约定有疑问吗?

enter image description here

因此,在第一种情况下,此方法无法在类内调用函数。我认为您是通过创建一类属性并从中获取变量来实现的。

class Attribute():
     def __init(self,a1,a2):
         self.a1=a1
         self.a2=a2
att=Attribute(1,2)
print(att.a1)
,

似乎您偶然发现了singleton模式。本质上,您的类在任何时候都应该只有一个实例,最有可能存储全局配置或类似目的。在Java中,您可以通过将构造函数设为私有来实现此模式,并具有返回私有静态实例的静态方法(例如getInstance())。

对于Python,实现单例实际上非常棘手。您可以看到有关该主题here的一些讨论。对我来说,您的操作方式可能是最简单的方法,尽管它没有严格执行单例约束,但对于小型项目而言,比添加大量复杂的元类(如“真正的”单例)更好

本文链接:https://www.f2er.com/1851220.html

大家都在问