[英]Python inference
我是python的新手,但不是編程人員。 有沒有辦法知道兩個對象是否具有相同的功能和字段?
我有這種情況
var1 = func1()
var2 = func2()
func3(var1)
func3(var2)
func1
和func2
都是我使用的庫中的函數,幾乎沒有文檔。
var1
和var2
是同一類型的對象的可能性很高,但是我如何確定?
說我知道func3(var1)
可以工作,有沒有辦法知道它是否可以與var2
工作?
首先 ,Python通常使用鴨子類型 :如果對象具有必需的屬性和方法,則可以使用它。 您可以通過以下方式進行檢查 :
if hasattr(var2, 'method_name'):
... your code ...
管道類型實現的另一種方法是隱式的。 例如,如果您的函數增加了其參數,則可以不檢查參數,而只需編寫:
result = int(var1) + 1
而且,如果無法將var1
為int,則用戶將得到一個可讀的錯誤:
TypeError: int() argument must be a string or a number, not 'MyCustomClass'
其次 ,您可以顯式檢查 var是否是某個類(或其后代)的實例。 如果您知道var1
是dict
的實例:
if isinstance(var2, dict):
... your code ...
如果var2
是dict
, defaultdict
或dict
其他子類的實例,則此代碼將起作用。
結論 :沒有收到任何驗證參數。 您始終需要在防止無效的屬性值和代碼可讀性之間保持平衡。 假設您是調用函數的用戶:很明顯參數應該具有哪種類型? 如果傳遞錯誤的值,該錯誤是否可以理解?
有沒有辦法知道兩個對象是否具有相同的功能和字段?
從技術上講是可以的,盡管我不建議這樣做。 您可以比較每個dir
上dir
的結果。
if dir(var1) == dir(var2):
# both have the same attributes
但是,由於它是如此脆弱,我仍然不建議這樣做。 如果var1
和var2
實現了一個名為frobnicate
的函數,但完全不同地定義了它,則dir
將無法得知它們的不同。
比較類型稍微好一點:
if type(var1) == type(var2):
# both are objects of the same type
但這並沒有多大幫助,因為具有相同的類型並不能確保它們具有相同的屬性。
說我知道
func3(var1)
可以工作,有沒有辦法我知道它是否可以與var2
工作
if var1 is var2:
# it'll work
就是這樣 如果var1
和var2
都是同一個對象,那么您將知道它的作用相同。 任何其他答案都取決於func3
的定義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.