Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Principielt spørgsmål

3 views
Skip to first unread message

Bertel Lund Hansen

unread,
Nov 5, 2020, 3:34:03 AM11/5/20
to
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

unread,
Nov 5, 2020, 8:05:54 AM11/5/20
to
Bertel Lund Hansen skrev:

> 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.)

> 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

unread,
Nov 5, 2020, 9:24:48 AM11/5/20
to
Klaus Alexander Seistrup skrev:

> 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.

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

Ja. Det virker fint.

> (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".

> 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.

> 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

unread,
Nov 7, 2020, 2:50:48 AM11/7/20
to
Bertel Lund Hansen skrev:

> 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__().
0 new messages