logo

Konstruktorji v Pythonu

Predpogoji: Objektno orientirano programiranje v Pythonu, objektno orientirano Python3

Python3






class> GeekforGeeks:> ># default constructor> >def> __init__(>self>):> >self>.geek>=> 'GeekforGeeks'> ># a method for printing data members> >def> print_Geek(>self>):> >print>(>self>.geek)> # creating object of the class> obj>=> GeekforGeeks()> # calling the instance method using the object obj> obj.print_Geek()>

>

np.naključno.rand
>

Izhod

java nespremenljiv seznam
GeekforGeeks>

Primer za parametriran konstruktor:

Python3




class> Addition:> >first>=> 0> >second>=> 0> >answer>=> 0> ># parameterized constructor> >def> __init__(>self>, f, s):> >self>.first>=> f> >self>.second>=> s> >def> display(>self>):> >print>(>'First number = '> +> str>(>self>.first))> >print>(>'Second number = '> +> str>(>self>.second))> >print>(>'Addition of two numbers = '> +> str>(>self>.answer))> >def> calculate(>self>):> >self>.answer>=> self>.first>+> self>.second> # creating object of the class> # this will invoke parameterized constructor> obj1>=> Addition(>1000>,>2000>)> # creating second object of same class> obj2>=> Addition(>10>,>20>)> # perform Addition on obj1> obj1.calculate()> # perform Addition on obj2> obj2.calculate()> # display result of obj1> obj1.display()> # display result of obj2> obj2.display()>

>

>

Izhod

First number = 1000 Second number = 2000 Addition of two numbers = 3000 First number = 10 Second number = 20 Addition of two numbers = 30>

primer:

Python




class> MyClass:> >def> __init__(>self>, name>=>None>):> >if> name>is> None>:> >print>(>'Default constructor called'>)> >else>:> >self>.name>=> name> >print>(>'Parameterized constructor called with name'>,>self>.name)> > >def> method(>self>):> >if> hasattr>(>self>,>'name'>):> >print>(>'Method called with name'>,>self>.name)> >else>:> >print>(>'Method called without a name'>)> # Create an object of the class using the default constructor> obj1>=> MyClass()> # Call a method of the class> obj1.method()> # Create an object of the class using the parameterized constructor> obj2>=> MyClass(>'John'>)> # Call a method of the class> obj2.method()>

java vrednost niza
>

>

Izhod

Default constructor called Method called without a name ('Parameterized constructor called with name', 'John') ('Method called with name', 'John')>

Pojasnilo:

V tem primeru definiramo razred MyClass tako s privzetim konstruktorjem kot s parametriziranim konstruktorjem. Privzeti konstruktor preveri, ali je bil parameter predan ali ne, in ustrezno natisne sporočilo na konzolo. Parametrizirani konstruktor sprejme eno samo ime parametra in nastavi atribut imena objekta na vrednost tega parametra.

Definiramo tudi metodo method(), ki preveri, ali ima objekt atribut imena ali ne, in ustrezno natisne sporočilo na konzolo.

Z obema vrstama konstruktorjev ustvarimo dva objekta razreda MyClass. Najprej ustvarimo objekt z uporabo privzetega konstruktorja, ki natisne sporočilo Privzeti konstruktor, ki ga kliče na konzolo. Nato na tem objektu pokličemo metodo method(), ki na konzolo natisne sporočilo, ki ga je poklicala metoda brez imena.

Nato ustvarimo objekt s parametriziranim konstruktorjem, ki mu posredujemo ime John. Konstruktor se prikliče samodejno, na konzolo pa se natisne sporočilo Parameterized constructor called with name John. Nato na tem objektu pokličemo metodo method(), ki na konzolo natisne sporočilo Method, poklicano z imenom John.

Na splošno ta primer prikazuje, kako je mogoče obe vrsti konstruktorjev implementirati v enem razredu v Pythonu.

linux make ukaz

Prednosti uporabe konstruktorjev v Pythonu:

    Inicializacija objektov : Konstruktorji se uporabljajo za inicializacijo objektov razreda. Omogočajo vam nastavitev privzetih vrednosti za atribute ali lastnosti in omogočajo tudi inicializacijo predmeta s podatki po meri. Enostavna implementacija: konstruktorje je enostavno implementirati v Python in jih je mogoče definirati z metodo __init__().
  • Boljša berljivost: Konstruktorji izboljšajo berljivost kode tako, da pojasnijo, katere vrednosti se inicializirajo in kako se inicializirajo.
  • Enkapsulacija : Konstruktorje je mogoče uporabiti za uveljavitev enkapsulacije, tako da zagotovijo, da so atributi objekta inicializirani pravilno in na nadzorovan način.

Slabosti uporabe konstruktorjev v Pythonu:

    Preobremenitev ni podprta: za razliko od drugih objektno usmerjenih jezikov Python ne podpira preobremenitve metod. To pomeni, da v enem razredu ne morete imeti več konstruktorjev z različnimi parametri. Omejena funkcionalnost: Konstruktorji v Pythonu imajo omejeno funkcionalnost v primerjavi s konstruktorji v drugih programskih jezikih. Na primer, Python nima konstruktorjev z modifikatorji dostopa, kot so javni, zasebni ali zaščiteni. Konstruktorji so morda nepotrebni: v nekaterih primerih konstruktorji morda niso potrebni, saj lahko zadostujejo privzete vrednosti atributov. V teh primerih lahko uporaba konstruktorja doda kodi nepotrebno zapletenost.

Na splošno so lahko konstruktorji v Pythonu uporabni za inicializacijo objektov in uveljavljanje enkapsulacije. Vendar morda niso vedno potrebni in imajo omejeno funkcionalnost v primerjavi s konstruktorji v drugih programskih jezikih.