Forum: get/set-funktioner i python?

Forum huvudsida -> Programmering -> get/set-funktioner i python?

Sidor: 1

Till botten

Oscar 16:54 - 9:e Maj 2007 | Post #1
Medlem
Inlägg: 15


Skicka PM
Jag har lite bakgrund i java sen gymnasiet, men inte mycket mer än att jag kommer ihåg praxisen med att använda get/set-funktioner hela tiden.
Nu sitter vi och kodar python i skolan med klasser igen, och jag börjar fundera över java-praxisen.

Använder man get/set-funktioner på samma sätt, om man ska koda så "pythonic" som möjligt?
Eller finns det inget smidigare sätt att göra det rätt på?Smiley

Vad är "rätt" i detta anseende, förresten?Smiley

-------------------------
"Söker FSF-pinnar på Fil.Fak."



ozamosi 17:17 - 9:e Maj 2007 | Post #2
Administratör
Inlägg: 1129


Skicka PM
Jag kan inte påminna mig att jag sett pythonkod använda get/set särskilt ofta. Lite greppande i /usr/lib/python2.5/site-packages/ verkar bekräfta att det inte är vanligt (även om det förekommer).

Jag misstänker att det har att göra med att direktaccess blir mer läslig kod att göra. Har du specialcheckar du vill göra för en specifik variabel du inte vill att någon rör utan att du vet det, kan du alltid göra get/set-funktioner, och döpa variabeln med ett _ i början, vilket är ett sätt att berätta för andra kodare att om det hade gått att göra saker privata i python hade den variabeln varit privat. Man kan också göra generella kontroller genom att skapa funktionerna __getattr__ och __setattr__ och göra gulligheter i dem. Eftersom det är python går det såklart att komma åt alla attribut på andra sätt, om programmeraren som använder ditt bibliotek verkligen Vill skjuta sig i foten.

Och jag har en fsf-pinne jag kommer över med i höstSmiley

-------------------------
Ljusblå

Senast redigerad 17:18 - 9:e Maj 2007


Oscar 17:32 - 9:e Maj 2007 | Post #3
Medlem
Inlägg: 15


Skicka PM
Oh, det där var precis det jag ville veta!

Och om jag tolkade dig rätt så är praxisen med typ variabeltilldelning i klasser såhär:
p = Monster("Tråkigt namn")
p.name = "Coolt namn istället"

och urläsning typ
print p.name


Istället för en massa jobbiga extrafunktionerSmiley

-------------------------
"Söker FSF-pinnar på Fil.Fak."



ozamosi 17:36 - 9:e Maj 2007 | Post #4
Administratör
Inlägg: 1129


Skicka PM
Tja... Jag har ingen källa, men jag skulle påstå det, i alla fallSmiley

-------------------------
Ljusblå



FunkyChicken 17:40 - 9:e Maj 2007 | Post #5
Nyhetsredaktör
Inlägg: 800


Skicka PM
Har haft en debatt om detta med min javalärare. Det finns knappast något mer vidrigt än get/set... Variabler är variabler och ska behandlas som sådana. Varför är det bara .NET som har properties? det är ju helt underbart...




Oscar 18:36 - 9:e Maj 2007 | Post #6
Medlem
Inlägg: 15


Skicka PM
I Ruby (har gluttat lite) så har de byggt in det här på ett imho jättesmart sätt:

class HelloWorld
attr_reader :varde, :varde2, :vardeN
attr_writer :skrivvarde, :vardeN
end
hej = HelloWorld
hej.varde => värdet
hej.varde = "nytt värde"

osv.

Tycker det är ganska smartSmiley

-------------------------
"Söker FSF-pinnar på Fil.Fak."



Belsebubben 16:14 - 10:e Maj 2007 | Post #7
Medlem
Inlägg: 76


Skicka PM
jo, ruby är ganska smart på det viset. Men eftersom man inte kan modifiera attr readers så är de mest en gimmick (typ som scaffolding i rails)

Det är inte nära lika bra som C# properties, fattar inte att ruby utvecklarna inte snott det än.

-------------------------
Das Blinkencomp, jag väljer dig!



Sidor: 1

Forum huvudsida -> Programmering -> get/set-funktioner i python?
Atom feed

Du får inte posta i den här tråden | Till toppen