我只想說我是 OOP 的新手,所以我不確定我應該在那里做什么。所以假設我有一個類,其中有一大堆資料函式:
class stuff:
def __init__ ...
def func1(self, arg1, arg2)
self.var1=arg1*self.var3
self.var2=arg2*self.var4
...
func1 使用了很多類中的變數(使用 self),我有很多函式和很多變數,這在一個類中非常方便。然而,每隔一段時間我還需要在物件外部的資料上使用該函式。在那種情況下,我將不得不將 var3 和 var4 傳遞給函式,但我不知道該怎么做。實際上,我必須傳遞大約 10 個變數。
那么有沒有好的方法呢?我應該復制每個函式以在物件外部使用嗎?但是有很多功能而且它們很長,我將不得不洗掉self。在每個變數之前,將很難維護。
我應該為我想處理的所有資料創建一個物件嗎?這也很煩人,init做了很多需要完整資料的事情,將它移動到單獨的函式會創建很多。
我應該在類內創建函式,而只在類外呼叫函式嗎?兩個問題,我必須以不同的方式命名它們并記住兩個名稱,如果我傳遞的資料非常大怎么辦?還是有其他方法可以做到這一點?
所以我想知道在 python 中是否有什么可以解決這個問題,因為我不知道要用谷歌搜索什么。我注意到很多圖書館都使用“。” 在它們的函式名稱中,所以我假設它們在類中的函式中,但我似乎在我的資料上使用它們,而不創建物件
uj5u.com熱心網友回復:
func1使用了很多類中的變數(使用self),我有很多函式和很多變數,這在一個類中非常方便
這明顯違反了單一職責原則,因此您應該考慮將類拆分為多個類,每個類負責一種輸入資料并處理對其的操作。
uj5u.com熱心網友回復:
我相信你問的是你是否可以使用一個類的成員函式,其中要么self參考另一個物件,它從中讀取其成員資料(如果另一個物件具有與你的原始類同名的成員,這是可能的)或更多很可能,你有幾個自由浮動(不是類變數)變數......或者你的其他類沒有具有完全相同名稱的成員。
在第二種情況下,最好的做法是創建一些獨立的函式,它接受幾個引數(或者更簡潔,一個包含所有引數的類),然后讓你的類參考這個程序,而不是而不是讓它在課堂上。這樣做的原因是,如果在多個地方需要這種行為,那么你正在撰寫的類可能實際上不應該首先對它負責。
uj5u.com熱心網友回復:
這是您需要的語法的快速示例:
class MyFirstClass:
def __init__(self, name):
self.name = name
@staticmethod
def static_function():
print("Static function called!")
def instance_function(self):
print("Instance function called on ", self.name)
class MySecondClass:
def main():
MyFirstClass.static_function()
anInstance = MyFirstClass("Adam")
anotherInstance = MyFirstClass("Bob")
anInstance.instance_function()
anotherInstance.instance_function()
MySecondClass.main()
uj5u.com熱心網友回復:
我不會說這是否是一個好的設計原則(不是),但我自己犯了方便的罪。這也假定該類仍將被實體化,并且您將使用一些self屬性,但不是全部。如果不是這種情況,請參閱有關靜態方法的其他答案
class Stuff:
def __init__() ...
def func1(self, arg1, arg2, arg3=None, arg4=None)
if arg3=None:
self.var1=arg1*self.var3
else:
self.var1=arg1*arg3
self.var2=arg2*self.var4
實際上,我必須傳遞大約 10 個變數。
在這種情況下,您可以使用kwargs并將它們解壓縮到函式中
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/537858.html
