現在我正在開發一個Tesseract類,它有一個呼叫get_relative_path函式的類變數。
由于所有的pdf2image和影像到字串的轉換,我把所有這些檔案保存在不同的檔案夾里。但是由于我不知道所有用戶的絕對路徑,我嘗試根據專案的名稱來獲取相對路徑。
我寫的這個函式是遞回的,并且做了我期望的事情。
class Tesseract()。
@staticmethod Tesseract().
def get_relpath_to_folder(folder_name, start_path = ' :)
for root, dirs, files in os.walk(start_path, topdown=True):
if folder_name in dirs:
return os.path.relpath(os.path.join(root,folder_name) )
return Tesseract.get_relpath_to_folder(folder_name, os.path.join('.', start_path ))
rel_path = get_relpath_to_folder(folder_name)
我的問題是,我如何用一個方法來初始化類的變數。
我試過:
- 使方法成為靜態的 。
- 使方法成為類方法 。
- 將類變數放在方法的上方和下方 。
那么,這里的最佳解決方案是什么呢?
我明確地想使用類變數,因為這是我讓所有物件的rel_path持久化的方法
我想使用類變數。
uj5u.com熱心網友回復:
當類被定義時,類屬性(不是變數)被評估。這絕對不是你想做的事。
也許你想讓類的屬性在定義時被評估。
也許你想把folder_name傳到__init__()方法中,并在那里設定該屬性?
uj5u.com熱心網友回復:
我不明白所有的背景,但是你的問題
我如何用一個方法來初始化類的變數。可以這樣回答。你可以使用__class__來參考一個實體的類。
class SomeClass。
def set_class_var_from_instance(self, value)。
self.__class__.class_var = value
some_instance = SomeClass()
another_instance = SomeClass()
some_instance.set_class_var_from_instance(1)
assert another_instance.class_var == 1.
assert SomeClass.class_var == 1
另一個選擇是在類上使用一個@classmethod,并在類上設定:
class SomeClass。
@classmethod SomeClass: @classmethod
def set_class_var(cls, value) 。
cls.class_var = value
SomeClass.set_class_var(1)
Some_instance = SomeClass()
assert some_instance.class_var == 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/332762.html
標籤:
