[英]Python: Passing self to class methods or arguments
我正在使用具有很多參數和方法的類在python項目中工作。 為了降低復雜性,我一直在編寫如下方法:
def foo(self):
return self.parameter1 * self.parameter2
顯式傳遞參數是否是更好的做法?
def foo(self, parameter1, parameter2):
return parameter1 * parameter2
之所以這樣,是因為我發現在不測試整個類的情況下很難測試該類中的功能。
為了降低復雜度,我一直在寫這樣的方法
此目的的假設是錯誤的,如果您定義實例方法,則應該使用self(實例變量)。
根據pylint:method_could_be_a_function :如果一個函數可以在沒有self(實例變量)的情況下運行,那么它應該是一個單獨的函數,而不是實例方法。
例如:
class A(object):
def __init__(self):
self.some_instance_var
def some_instance_method(self):
#code here is suggested to be related to self(instance variable), eg:
return self.some_instance_var
最好將它作為實例方法放入類中。
class A(object):
...
def foo(self):
return self.parameter1 * self.parameter2
而且這應該是一個普通函數,而不是實例方法。 因為函數的內容與自身(實例變量)無關。
def foo(self, parameter1, parameter2):
return parameter1 * parameter2
您的問題做出了一些與OO設計不一致的假設。
如果parameter1
和parameter2
不是 self
表示的對象的固有屬性,則需要傳遞它們。 但是,如果它們是 self
固有屬性,則它們應該已經與self
相關聯,不需要傳遞。
OO設計(通常是對象)的主要要點是將描述對象的數據與在對象上工作的方法明確地關聯在一起。
回答:
對對象內在的任何事物都使用一個self
引用,並將那些不是的值作為參數傳遞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.