2 回答

TA貢獻1856條經(jīng)驗 獲得超5個贊
你寫了:
a 的擴散常數(shù)Substance取決于Water
這讓我們認為擴散常數(shù)是物質(zhì)的特征,因此該類Substance應該擁有允許計算它的方法(使用參數(shù)來提供實例,Water因為它依賴于它)。
這對于大多數(shù)簡單的情況都很有效,如果一個真正的概念擁有一個特征,那么它的模型(在這種情況下是一個類)應該擁有相關的屬性或方法。
一些設計模式和/或更復雜的需求可能有理由打破這個“規(guī)則”以引入更多吸引力。
self另外,回答你的評論:傳遞給函數(shù) 不是問題(至少在我看來) 。self只是對當前實例的引用,沒有什么特別的,只是它是命名當前實例的廣泛尊重的約定,因此也是(實例)方法的第一個參數(shù)。
進一步解釋一下:實例方法必須接受對相關實例的引用作為第一個參數(shù)。按照慣例,這個位置參數(shù)被命名為self,但您可以決定將其命名為this,instance或者無論您想要什么,它都是一樣的。然后您只需在方法中使用正確的參數(shù)名稱即可。
請參閱下面的代碼。它為實例參數(shù)使用了非常糟糕的名稱,但它的工作原理就好像self已經(jīng)被使用過一樣:
class Foo:
def __init__(current_instance):
current_instance.bar = 'baz'
def __str__(this_name_is_ridiculous):
return this_name_is_ridiculous.bar
print(Foo()) # prints baz

TA貢獻1862條經(jīng)驗 獲得超6個贊
我認為Water繼承了一些東西Substance。那么你可以diffusion_constant在每個中都有一個Substance,也可以有一個diffuse帶有一個或多個Substances 的函數(shù)
編輯:
class Water:
def diffuse(self, *args):
#check if args is greater 0 or None and then iterate and apply diffusion_constants
class Substance:
diffusion_constant = 0 #base constant
class Sirup(Substance):
diffusion_constant = 3
#somewhere later then
corn_sirup = Sirup()
sugary_sirup = Sirup()
water = Water()
water.diffuse(corn_sirup, sugary_sirup)
編輯:由于評論,我更改了代碼。Python 具有鴨子類型,因此只要您的物質(zhì)具有diffusion_constant屬性,就可以訪問它,無論它是什么。然后應該這樣做
添加回答
舉報