簡體   English   中英

Python推斷

[英]Python inference

我是python的新手,但不是編程人員。 有沒有辦法知道兩個對象是否具有相同的功能和字段?

我有這種情況

var1 = func1()
var2 = func2()
func3(var1)
func3(var2)

func1func2都是我使用的庫中的函數,幾乎沒有文檔。

var1var2是同一類型的對象的可能性很高,但是我如何確定?

說我知道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是否是某個類(或其后代)的實例。 如果您知道var1dict的實例:

if isinstance(var2, dict):
    ... your code ...

如果var2dictdefaultdictdict其他子類的實例,則此代碼將起作用。

結論 :沒有收到任何驗證參數。 您始終需要在防止無效的屬性值和代碼可讀性之間保持平衡。 假設您是調用函數的用戶:很明顯參數應該具有哪種類型? 如果傳遞錯誤的值,該錯誤是否可以理解?

有沒有辦法知道兩個對象是否具有相同的功能和字段?

從技術上講是可以的,盡管我不建議這樣做。 您可以比較每個dirdir的結果。

if dir(var1) == dir(var2):
    # both have the same attributes

但是,由於它是如此脆弱,我仍然不建議這樣做。 如果var1var2實現了一個名為frobnicate的函數,但完全不同地定義了它,則dir將無法得知它們的不同。

比較類型稍微好一點:

if type(var1) == type(var2):
    # both are objects of the same type

但這並沒有多大幫助,因為具有相同的類型並不能確保它們具有相同的屬性。

說我知道func3(var1)可以工作,有沒有辦法我知道它是否可以與var2工作

if var1 is var2:
    # it'll work

就是這樣 如果var1var2都是同一個對象,那么您將知道它的作用相同。 任何其他答案都取決於func3的定義。

暫無
暫無

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

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