[英]Python argument passing in object oriented programming
如果在其他地方被問到這個問題我會道歉,但我不知道如何制定這個問題。
我是物理學家,Python是我的第一個面向對象的語言。 我喜歡這種語言的干凈代碼,不知何故,一切都按預期工作(由我;)。
但是我有一個問題,也許它更像是一個設計選擇,但由於我的面向對象編程是自學成才的,而且非常基礎,我不知道該走哪條路。
所以問題是:我應該主要傳遞參數還是直接操縱對象數據? 因為,例如:
class test(object):
...
def dosomething(self, x, y):
# do someting with x, y involving a lot of mathematic manipulations
def calcit(self):
k = self.dosomething(self.x[i], self.y[i])
# do something else with k
產生比傳遞x, y
更清晰的代碼x, y
但每次傳遞i
並明確地寫self
。 你更喜歡什么,或者這是一個面向對象的范例,我正在打破?
性能方面,這應該沒有區別,因為參數是通過引用傳遞的,對吧?
我應該主要傳遞參數或直接操縱對象數據
將對象視為具有狀態的系統。 如果數據屬於對象的狀態,則應將其作為成員打包在對象中。 否則,它應該作為參數傳遞給它的方法。
在你的榜樣,你應該怎么做取決於你是否要dosomething
價值觀x
和y
不屬於對象的成員。 如果不這樣做,那么你可以有dosomething
獲取x
和y
從self
。
另外,請記住,如果你沒有在方法中使用self
,那么它可能根本不應該是一種方法,而是一種獨立的功能。
性能方面,這應該沒有區別,因為參數是通過引用傳遞的,對嗎?
我根本不擔心此時的表現。
對象范例是:將方法和屬性打包在一起並將其稱為對象。
因此,如果您精確操作其中一個屬性,則不需要將它們作為參數傳遞,您應該使用對象的那些屬性。 如果您使用其他任何東西,那么您必須將其作為參數傳遞。
沒有什么可以阻止你將你的對象的值變成另一個變量,如果它每次都困擾你寫自己!
要完成,你的x和y作為參數的函數不應該在你的對象中,而是在它之外作為輔助函數,如果你真的想做那樣的事情,原因是沒有理由把你的對象作為第一個參數傳遞(如果它是隱含的)如果你不使用它。
並且表現明智,它應該非常相似!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.