簡體   English   中英

關於 Python 中導入對象的約定的問題?

[英]Question on the convention of importing objects in 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 的慣例。 這樣可以嗎,或者有什么可以更好地實現所提到的目的。 我想到的問題是,所有這些其他變量(在本例中為 attribute1 和 attribute2)只是......在那里......在 myobject 模塊中。 只是感覺有點奇怪,因為這些不是單獨訪問的東西,但事實上它是可訪問的……我覺得還有其他一些傳統的方法可以做到這一點。 這完全沒問題,還是我有顧慮(如果是,如何解決)?

編輯:為了更清楚,這里有一個例子:我有一個相機 class,它存儲鏡頭和 CCD 等的屬性(比如在 myclass.py 中)。 因此用戶可以定義不同的相機並在應用程序中使用它們。 但是,我想讓他們有一些預設相機,因此我定義了相機 class 的對象,這些對象特定於我知道通常用於此應用程序的某些相機(如在 myobject.py 中)。 所以當他們運行應用程序時,他們可以只導入這些預設相機(作為相機對象)(就像在 app.py 中一樣)。 如果在myobject.py中這樣寫不是最好的方法,那么這些預設對象應該怎么寫呢?

在此處輸入圖像描述

所以你這個方法在第一種情況下無法在 class 中調用 function。 我想你是通過制作一個 class 的屬性並從中獲取變量來實現的。

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

看起來您偶然發現了singleton模式。 本質上,您的 class 在任何時候都應該只有一個實例,最有可能存儲全局配置或某些類似目的。 在 Java 中,您將通過將構造函數設為私有來實現此模式,並有一個返回私有 static 實例的 static 方法(例如getInstance() )。

對於Python,單例的實現其實還是比較棘手的。 您可以在此處看到有關該主題的一些討論。 對我來說,你是怎么做的可能是最簡單的方法,雖然它沒有嚴格執行 singleton 約束,但對於一個小項目來說,它可能比添加大量復雜性(如元類)來制作“真正的”單身人士更好.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM