Discussion:
Principielt spørgsmål
(for gammel til at besvare)
Bertel Lund Hansen
2020-11-05 08:34:02 UTC
Permalink
Jeg har et script med en klasse, Utilities. Den indeholder nogle
konstanter og nogle funktioner.

Jeg kan bruge den på to måder, og spørgsmålet er hvilken der er
mest logisk.

1. Jeg laver klassen normalt (init kaldes automatisk):

class Utilities:
def __init__ (self):
self.kept_houses=self.read_houses(1)
self.wanted_houses=self.read_houses(0)
...

og instantierer den med:

utlitity=Utility()

så alle elementerne tilgås med "utility.xyz".


2. Jeg laver en speciel init():

class Utility:
def init ():
Utility.kept_houses=Utility.read_houses(1)
Utility.wanted_houses=Utility.read_houses(0)

som kaldes specifikt:

Utilities.init()

og alle elementerne tilgås med "Utilities.xyz".


Hvad mener I?
--
/Bertel
Klaus Alexander Seistrup
2020-11-05 13:05:53 UTC
Permalink
Post by Bertel Lund Hansen
Jeg kan bruge den på to måder, og spørgsmålet er hvilken
der er mest logisk.
Det mest pytoniske vil være at benytte __init__-metoden. Når man
instantierer en klasse skal man ikke normal ligge og fedte med en
extra .init() før den kan bruges.

Kan man overhovedet bare kalde Utilities.init() i det andet
eksempel, uden at have instantieret klassen først?

(I parentes bemærket skal init() i andet tilfælde som minimum have
et self-argument — ellers får man en fejl når man kalder klassen,
fordi fortolkeren mener at antallet af givne argumenter ikke svarer
overens med det forventede.)
Post by Bertel Lund Hansen
Hvad mener I?
Jeg vil uden at blinke vælge den første løsning. Afhængigt af de
konkrete omstændigheder, ville jeg dog måske lade __init__() tage
et eller flere argumenter, fx

class Utilities(object):
def __init__(self, kept=1, wanted=0):


— eller hvad der nu er brug for — som så kan instantiere med fx

utilities = Utilities(kept=2)

hvis der er behov for andre værdier en standardværdierne.
--
Klaus Alexander Seistrup
🚀 gemini://port1965.eu/
Bertel Lund Hansen
2020-11-05 14:24:46 UTC
Permalink
Post by Klaus Alexander Seistrup
instantierer en klasse skal man ikke normal ligge og fedte med en
extra .init() før den kan bruges.
Den er ikke ekstra. __init__() kaldes kun hvis man laver en
instans, så den fjerne jeg i version 2 og erstatter med init()
som kaldes udefra.
Post by Klaus Alexander Seistrup
Kan man overhovedet bare kalde Utilities.init() i det andet
eksempel, uden at have instantieret klassen først?
Ja. Det virker fint.
Post by Klaus Alexander Seistrup
(I parentes bemærket skal init() i andet tilfælde som minimum have
et self-argument
Nej, det vil ikke virke. self er ukendt hvis det ikke kommer fra
et objekt. Men alle self'erne skal udskiftes med "Utilities".
Post by Klaus Alexander Seistrup
Jeg vil uden at blinke vælge den første løsning. Afhængigt af de
konkrete omstændigheder, ville jeg dog måske lade __init__() tage
et eller flere argumenter,
Jeg opretter kun ét objekt, så jeg kan ikke kalde udefra med
forskellige værdier.
Post by Klaus Alexander Seistrup
hvis der er behov for andre værdier en standardværdierne.
Samme funktion bruges til at udtrække to forskellige sæt data.

Der er to grunde til mit eksperiment. For det første forekom det
mig lidt overflødigt at skrive en klasse der kan alt det jeg har
brug for - blot for at oprette et objekt magen til der kan det
samme. For det andet er det jo rutine at man bruger en klasse
direkte hvis den kun indeholder konstanter eller variable. Nu fik
jeg blot påvist at det også kan lade sig gøre selv om den også
indeholder funktioner.
--
/Bertel
Klaus Alexander Seistrup
2020-11-07 07:50:47 UTC
Permalink
Post by Bertel Lund Hansen
Der er to grunde til mit eksperiment.
Du har ikke nævnt noget der kan få mig til at vælge den anden
mulighed. Jeg vil stadig holde fast i formen med __init__().
--
Klaus Alexander Seistrup
🚀 gemini://port1965.eu/
Loading...