Perl-Objekt und Python-Klasse Teil 2.

Erbe

Ein Beispiel für die Definition eines einfachen Zählers (add) und eines anderen geerbten Zählers ( addc)

f.pl


package Foo;
sub new { bless {x => 0}, shift }
sub add { ++ shift->{x} }
1;

package Bar;
use base qw(Foo) ;
sub new  { my $r = Foo->new ; $r->{y} = 0 ; bless $r, shift }
sub addc { ++ shift->{y} }
1;

use Data::Dumper ;
my $o = Foo->new ;
printf "Foo add:    %s\n", $o->add for 0 .. 1 ;
printf Dumper $o ;

my $p = Bar->new ;
printf "Bar add:    %s\n", $p->add ;
printf "Bar addc:   %s\n", $p->addc for 0 .. 1 ;
printf Dumper $p ;

python


$ perl f.pl
Foo add:    1
Foo add:    2
$VAR1 = bless( {
                 'x' => 2
               }, 'Foo' );
Bar add:    1
Bar addc:   1
Bar addc:   2
$VAR1 = bless( {
                 'y' => 2,
                 'x' => 1
               }, 'Bar' );

f.py


class Foo(object):
    def __init__(self):
        self._x = 0
    def add(self):
        self._x = self._x + 1
        return self._x

class Bar(Foo):
    def __init__(self):
        super(Bar, self).__init__()
        self._y = 0
    def addc(self):
        self._y = self._y + 1
        return self._y


o = Foo()
for i in [0,1]:
    print ("Foo add:    {0}".format(o.add()))
print (vars(o))

p = Bar()
print ("Bar add:    {0}".format(p.add()))
for i in [0,1]:
    print ("Bar addc:   {0}".format(p.addc()))
print (vars(p))

python


$ python f.py
Foo add:    1
Foo add:    2
{'_x': 2}
Bar add:    1
Bar addc:   1
Bar addc:   2
{'_y': 2, '_x': 1}

Vererbung - Rufen Sie die Vererbungsquellenmethode mit einem Alias auf

Wenn Sie eine Methode mit demselben Namen wie die Methode der Vererbungsquelle (übergeordnet, Basisklasse) angeben möchten, aber auch auf die Vererbungsquelle zugreifen möchten.

Ein Beispiel für die Verwendung des Vererbungsquellenzählers "add" als "addp" und die Neudefinition von "add" in dem geerbten.

perl


package Foo;
sub new{ bless {x => 0}, shift }
sub add{ ++ shift->{x} }
1;

package Bar;
use base qw(Foo) ;
sub new  { my $r = Foo->new ; $r->{y} = 0 ; bless $r, shift }
sub add  { ++ shift->{y} }
sub addp { shift->SUPER::add }
1;

use Data::Dumper ;
my $o = Foo->new ;
printf "Foo add:    %s\n", $o->add for 0 .. 1 ;
printf Dumper $o ;

my $p = Bar->new ;
printf "Bar addp:   %s\n", $p->addp ;
printf "Bar add:    %s\n", $p->add for 0 .. 1 ;
printf Dumper $p ;

python


class Foo(object):
    def __init__(self):
        self._x = 0
    def add(self):
        self._x = self._x + 1
        return self._x

class Bar(Foo):
    def __init__(self):
        super(Bar, self).__init__()
        self._y = 0
    def add(self):
        self._y = self._y + 1
        return self._y
    def addp(self):
        return super(Bar, self).add()

o = Foo()
for i in [0,1]:
    print ("Foo add:    {0}".format(o.add()))
print (vars(o))

p = Bar()
print ("Bar addp:   {0}".format(p.addp()))
for i in [0,1]:
    print ("Bar add:    {0}".format(p.add()))
print (vars(p))

Recommended Posts

Perl-Objekt und Python-Klasse Teil 2.
Perl-Objekt und Python-Klasse Teil 1.
Python: Klassen- und Instanzvariablen
Informationen zu Python-Objekten und -Klassen
Informationen zu Python-Variablen und -Objekten
Python-Klassen- und Instanzvariablen
Python-Klassendefinitionen und Instanzbehandlung
Zuweisungen und Änderungen in Python-Objekten
Untersuchen Sie die Klasse eines Objekts mit Python
AM-Modulation und Demodulation mit Python Part 2
FM-Modulation und Demodulation mit Python Part 3
[Python] Unterschied zwischen Klassenmethode und statischer Methode
FM-Modulation und Demodulation mit Python Part 2
Apropos Python-Klassenattribute und Metaklassen
QGIS + Python Teil 2
[Python] -Klasse, Instanz
"Kanrika" die Python-Klasse
Über Python, Klasse
QGIS + Python Teil 1
Python: Scraping Teil 1
Python-Klasse, Instanz
# Python-Grundlagen (Klasse)
Lösung Wenn Sie Python 3.6 oder höher verwenden, benötigen Sie die enum34-Bibliothek ebenfalls nicht. Deinstallieren Sie sie daher und verwenden Sie das Standard-Enum-Modul. Enum34 deinstallieren Führen Sie nach der Deinstallation von enum34 erneut `pip install optuna` aus und Sie haben Optuna erfolgreich installiert! Python, pip, Python3, enum, OptunaPython3 Beginn Teil 1
Python: Scraping Teil 2
[Einführung in Python3 Tag 12] Kapitel 6 Objekte und Klassen (6.3-6.15)
Unterschied zwischen Variablen und Selbst. Variablen in der [Python] -Klasse
Ich habe eine Klasse in Python3 und Java geschrieben
[Einführung in Python3 Tag 11] Kapitel 6 Objekte und Klassen (6.1-6.2)
Probleme mit pseudo-privaten Python-Variablen und Klassenvererbung
[Python] Klassentyp und Verwendung des datetime-Moduls
[Python] Komprimieren und dekomprimieren
Über Klasse und Instanz
Python-Syslog-Wrapper-Klasse
Python-Klasse (Python-Lernnotiz ⑦)
Python- und Numpy-Tipps
Das einfachste Python-Memo in Japan (Klassen und Objekte)
[Python] Pip und Wheel
Fallklasse in Python
[Python] Konvertieren Sie Allzweckcontainer und Klasse ineinander
Python Iterator und Generator
[Python] Klassenvererbung (super)
Python selbst erstellte Klassensortierung
Grundmethode der [Python] -Klasse
Python-Pakete und -Module
Vue-Cli- und Python-Integration
Ruby, Python und Map
[Python] Klassenvererbung, überschreiben
Python-Eingabe und Ausgabe
Python und Ruby teilen sich
Python Basic Memorandum Teil 2
Python-Subprozess-Wrapper-Klasse
Python-Grundnotiz - Teil 2
Installieren von Python 3 auf einem Mac und Überprüfen der Grundfunktionen Teil 1
Klassen- und statische Methoden
Python asyncio und ContextVar
Python-Grundnotiz - Teil 1
YOLO Python-Wrapper-Klasse
Klassennotation in Python