簡體   English   中英

Python參數傳遞面向對象編程

[英]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價值觀xy不屬於對象的成員。 如果不這樣做,那么你可以有dosomething獲取xyself

另外,請記住,如果你沒有在方法中使用self ,那么它可能根本不應該是一種方法,而是一種獨立的功能。

性能方面,這應該沒有區別,因為參數是通過引用傳遞的,對嗎?

我根本不擔心此時的表現。

對象范例是:將方法和屬性打包在一起並將其稱為對象。

因此,如果您精確操作其中一個屬性,則不需要將它們作為參數傳遞,您應該使用對象的那些屬性。 如果您使用其他任何東西,那么您必須將其作為參數傳遞。

沒有什么可以阻止你將你的對象的值變成另一個變量,如果它每次都困擾你寫自己!

要完成,你的x和y作為參數的函數不應該在你的對象中,而是在它之外作為輔助函數,如果你真的想做那樣的事情,原因是沒有理由把你的對象作為第一個參數傳遞(如果它是隱含的)如果你不使用它。

並且表現明智,它應該非常相似!

暫無
暫無

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

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