Předpoklady: Objektově orientované programování v Pythonu, objektově orientované 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()> |
>
>Výstup
panda tát
GeekforGeeks>
Příklad parametrizovaný 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()> |
>
smyčky while a do while v Javě
>Výstup
First number = 1000 Second number = 2000 Addition of two numbers = 3000 First number = 10 Second number = 20 Addition of two numbers = 30>
Příklad:
Krajta
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()> |
jak zjistit velikost displeje
>
>Výstup
Default constructor called Method called without a name ('Parameterized constructor called with name', 'John') ('Method called with name', 'John')> Vysvětlení:
V tomto příkladu definujeme třídu MyClass s výchozím i parametrizovaným konstruktorem. Výchozí konstruktor zkontroluje, zda byl parametr předán nebo ne, a podle toho vytiskne zprávu do konzoly. Parametrizovaný konstruktor převezme název jediného parametru a nastaví atribut názvu objektu na hodnotu tohoto parametru.
Definujeme také metodu method(), která kontroluje, zda má objekt atribut name či nikoli, a podle toho vytiskne zprávu do konzole.
Pomocí obou typů konstruktorů vytvoříme dva objekty třídy MyClass. Nejprve vytvoříme objekt pomocí výchozího konstruktoru, který vypíše zprávu Výchozí konstruktor volaný do konzole. Na tento objekt pak zavoláme metodu method(), která do konzole vypíše zprávu Metoda volaná beze jména.
Dále vytvoříme objekt pomocí parametrizovaného konstruktoru a předáme mu jméno John. Konstruktor se zavolá automaticky a na konzoli se vytiskne zpráva Parametrizovaný konstruktor volal jménem John. Na tento objekt pak zavoláme metodu method(), která do konzole vytiskne zprávu Metoda volaná se jménem John.
Celkově tento příklad ukazuje, jak lze oba typy konstruktorů implementovat v jedné třídě v Pythonu.
Výhody použití konstruktorů v Pythonu:
- Inicializace objektů : Konstruktory se používají k inicializaci objektů třídy. Umožňují vám nastavit výchozí hodnoty pro atributy nebo vlastnosti a také vám umožňují inicializovat objekt pomocí vlastních dat. Snadná implementace: Konstruktory se v Pythonu snadno implementují a lze je definovat pomocí metody __init__() .
- Lepší čitelnost: Konstruktory zlepšují čitelnost kódu tím, že je jasné, jaké hodnoty se inicializují a jak se inicializují. Zapouzdření: Konstruktory lze použít k vynucení zapouzdření tím, že zajistí, že atributy objektu jsou inicializovány správně a řízeným způsobem.
Nevýhody použití konstruktorů v Pythonu:
- Přetížení není podporováno: Na rozdíl od jiných objektově orientovaných jazyků Python nepodporuje přetížení metod. To znamená, že v jedné třídě nemůžete mít více konstruktorů s různými parametry. Omezená funkčnost: Konstruktory v Pythonu mají ve srovnání s konstruktory v jiných programovacích jazycích omezenou funkčnost. Například Python nemá konstruktory s modifikátory přístupu jako public, private nebo protected. Konstruktory mohou být zbytečné: V některých případech nemusí být konstruktory nutné, protože výchozí hodnoty atributů mohou být dostatečné. V těchto případech může použití konstruktoru přidat zbytečné složitosti kódu.
Celkově mohou být konstruktory v Pythonu užitečné pro inicializaci objektů a vynucení zapouzdření. Nemusí však být vždy nutné a ve srovnání s konstruktory v jiných programovacích jazycích jsou ve své funkčnosti omezené.