objet perl et classe python partie 2.

Héritage

Un exemple de définition d'un compteur simple (ʻadd) et d'héritage d'un autre compteur (ʻ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}

Héritage - Appelez la méthode source d'héritage avec un alias

Si vous souhaitez donner une méthode avec le même nom que la méthode de la source d'héritage (parent, classe de base), mais vous souhaitez également accéder à la source d'héritage.

Un exemple d'utilisation du compteur de source d'héritage ʻadd comme ʻaddp et de redéfinition de ʻadd` dans celui hérité.

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

objet perl et classe python partie 2.
objet perl et classe python partie 1.
Python: variables de classe et d'instance
À propos des objets et des classes Python
À propos des variables et des objets Python
Variables de classe et d'instance Python
Définitions de classe Python et gestion des instances
Affectations et modifications des objets Python
Examiner la classe d'un objet avec python
Modulation et démodulation AM avec Python Partie 2
Modulation et démodulation FM avec Python Partie 3
[Python] Différence entre la méthode de classe et la méthode statique
Modulation et démodulation FM avec Python Partie 2
Parler des attributs de classe Python et des métaclasses
QGIS + Python Partie 2
[Python] classe, instance
"Kanrika" la classe python
À propos de python, classe
QGIS + Python Partie 1
Python: grattage partie 1
classe python, instance
Les bases de #Python (classe)
Python3 commence la partie 1
Python: grattage, partie 2
[Introduction à Python3 Jour 12] Chapitre 6 Objets et classes (6.3-6.15)
[python] Différence entre variable et self. Variable dans la classe
J'ai écrit une classe en Python3 et Java
[Introduction à Python3 Jour 11] Chapitre 6 Objets et classes (6.1-6.2)
Problème avec les variables pseudo-privées Python et l'héritage de classe
[Python] Type de classe et utilisation du module datetime
[python] Compresser et décompresser
À propos de la classe et de l'instance
classe wrapper python syslog
Classe Python (mémo d'apprentissage Python ⑦)
Astuces Python et Numpy
Le mémo Python le plus simple au Japon (classes et objets)
[Python] pip et roue
classe de cas en python
[Python] Convertit un conteneur à usage général et une classe entre eux
Itérateur et générateur Python
[Python] Héritage de classe (super)
Tri par classe Python
[python] méthode de base de la classe
Paquets et modules Python
Intégration Vue-Cli et Python
Ruby, Python et carte
[Python] Héritage de classe, remplacement
entrée et sortie python
Python et Ruby se séparent
Mémorandum de base Python partie 2
classe de wrapper de sous-processus python
Mémo de base Python - Partie 2
Installation de Python 3 sur Mac et vérification du fonctionnement de base Partie 1
Classes et méthodes statiques
Python asyncio et ContextVar
Mémo de base Python - Partie 1
Classe wrapper YOLO Python
Notation de classe en Python