Ceci est une suite de Fonctions. Cette fois, je vais expliquer la classe!
Tout d'abord, comparons les méthodes de description de base. Ce n'est pas si différent de Gatsuri, donc je pense que vous pouvez le lire facilement. Cependant, il existe de nombreuses différences. ..
Code PHP
<?php
class Hoge {
static private $defaultValue = 'hogehoge';
private $value = null;
public function __construct($value=null) {
if ($value) {
$this->value = $value;
} else {
$this->value = self::$defaultValue;
}
}
public function getValue() {
return $this->value;
}
}
$hoge = new Hoge();
echo $hoge->getValue();
Code Python
# coding=utf8
class Hoge(object):
default_value = 'hogehoge'
def __init__(self, value=None):
if value:
self.value = value
else:
self.value = self.default_value
def get_value(self):
return self.value
hoge = Hoge()
print(hoge.get_value())
La définition de classe se fait en utilisant class
comme en PHP.
Comme les instructions «if» et «function», la représentation de la portée est représentée par «indent» au lieu de «{}».
Encore une fois, n'oubliez pas le «: (deux-points)» à la fin de la définition de classe.
Lors de la création d'une classe simple, assurez-vous d'hériter de la «classe d'objet». Vous pouvez le créer sans en hériter, mais il y a de nombreux avantages à en hériter. Si vous voulez en savoir plus, veuillez vous référer à ici.
C'est l'un des endroits où vous pouvez facilement faire la différence en comparant les sources. Il n'y a pas de «modificateur d'accès» tel que «public» en Python, et fondamentalement tout est traité comme «public». Pour le moment, si vous ajoutez «__» avant le nom de la variable ou de la méthode d'instance, vous ne pourrez pas y accéder.
Inutile de dire que le «nom de la méthode constructeur» est différent. PHP est «__construct» et Python est «__init __».
** C'est l'une des parties appelées "Python Kimoi !!!" **. .. Ce «soi» est une «référence à lui-même (votre propre instance)». Il est trop compliqué d'expliquer pourquoi une telle chose est faite, alors s'il vous plaît google chacun. ..
L'important ici est que ** le premier argument de la méthode passe toujours une référence à lui-même **.
Dans le cas de PHP, la définition est divisée en utilisant le qualificateur statique
, mais dans le cas de Python, la définition de la ʻinstance variable doit être faite dans la méthode
telle que __init__
.
Toutes les variables définies en dehors de la «méthode» sont des «variables de classe».
Si vous exécutez l'exemple ci-dessous, Hoge.hoge
sera affiché, mais vous pouvez voir que Hoge.piyo
provoque une erreur.
# coding=utf8
class Hoge(object):
hoge = 'hoge' #Variable de classe
def __init__(self):
self.piyo = 'piyo' #Variable d'instance
print(Hoge.hoge)
#Inaccessible car la variable d'instance n'est pas instanciée
print(Hoge.piyo)
Veuillez noter qu'il est facile d'oublier (oublier). ..
Ceci est également explicite, mais en PHP c'est «$ this-> value» et en Python c'est «self.value». Il y a aussi une différence entre l '«opérateur de flèche» et «l'opérateur de point», donc soyez prudent.
En ce qui concerne les «variables de classe» et les «méthodes statiques», en PHP, il est écrit comme «sefl :: $ hoge», mais Python est accessible avec «self.hoge» comme les variables d'instance.
Parlons de l'héritage de classe. Comme toujours, commencez par l'exemple de code.
Code PHP
<?php
class BaseClass {
public function __construct($value) {
$this->value = $value;
}
public function getValue() {
return$this->value;
}
}
class SubClass extends BaseClass {
public function __construct($value) {
$value = $value * 2;
parent::__construct($value);
}
}
$hoge = new SubClass(10);
echo $hoge->getValue();
Code Python
# coding=utf8
class BaseClass(object):
def __init__(self, value):
self.value = value
def get_value(self):
return self.value
class SubClass(BaseClass):
def __init__(self, value):
value = value * 2
super(SubClass, self).__init__(value)
hoge = SubClass(10)
print(hoge.get_value())
Je l'ai déjà fait dans l'explication de la définition de classe, mais je vais l'expliquer à nouveau.
Pour hériter d'une classe en Python, écrivez simplement le nom de la classe dont vous voulez hériter dans ()
après le nom de la classe
.
class SubClass(BaseClass):
En Python, utilisez la super fonction
pour accéder à la classe parent.
Dans l'exemple, la méthode (constructeur) de la classe parent est appelée dans le constructeur, mais vous pouvez l'appeler de la même manière avec une méthode normale.
super(SubClass, self).__init__(value)
Une fois démonté, il ressemble à ce qui suit.
super(Propre classe,Propre instance).Fonction que vous souhaitez appeler(argument)
Comment Python prend en charge l'héritage multiple de classes! C'est un héritage multiple pratique, mais il a tendance à être compliqué, alors utilisez-le avec prudence.
Identique à la description d'héritage normale.
La classe dont vous voulez hériter est décrite dans ()
, mais s'il y a plusieurs classes, séparez-les simplement par , (virgule)
.
class SubClass(HogeClass, PiyoClass):
** Faites attention car c'est déroutant ici! ** ** Tout d'abord, un exemple de code.
# coding=utf8
class A(object):
def __init__(self):
super(A, self).__init__()
print('A')
class B(object):
def __init__(self):
super(B, self).__init__()
print('B')
class C(A, B):
def __init__(self):
super(C, self).__init__()
print('C')
instance = C()
Il existe une «classe C» qui hérite de deux de la «classe A» et de la «classe B». Si vous faites cela, vous obtiendrez le résultat suivant.
B
A
C
Si vous regardez le résultat, vous pouvez voir qu'ils sont appelés dans l'ordre B-> A-> C
.
J'ai expliqué plus tôt que la «super fonction» est pour accéder à la classe parent, mais à proprement parler, c'est pour accéder à la «classe parent ou sœur». Puisque les classes parentes de la «classe C», de la «classe A» et de la «classe B», ont une relation fraternelle, la «super fonction» est nécessaire.
Peut-être que cette explication n'est pas encore tout à fait correcte, alors jetez un œil à la suivante!
La définition de classe C
est la classe C (A, B):
, et ʻA classeest déclarée en premier. Dans ce cas, le parent immédiat de «C class» est traité comme «A class». En d'autres termes,
super ()dans
C class pointe vers ʻA class
.
Ensuite, si vous regardez ʻA classe, il y a
classe Bdans la relation des frères. La
super fonction est aussi pour accéder aux classes frères, donc
super () ʻin ʻA class pointera vers
classe B`.
Le reste est «classe B», mais il n'y a pas de parent dans «classe B».
Il existe une «classe» comme relation fraternelle, mais comme Python est intelligent, il ignorera la relation que vous avez tracée une fois.
Il n'y a donc rien sur lequel pointe super ()
de la
classe B`.
En conséquence, l'ordre est «B-> A-> C». C'est un peu déroutant, mais l'avez-vous compris?
Est-ce proche de «trait» en PHP? ** Si vous pensez "Un nouveau sort ..." **, ne vous inquiétez pas. Ceci est juste une histoire d '«héritage multiple».
Tout d'abord, un échantillon.
# coding=utf8
class Mixin(object):
def say(self):
print('Hoge!!!!!')
class Human(Mixin, object):
pass #pass signifie "ne rien faire".
class Cat(Mixin, object):
pass
human = Human()
human.say()
cat = Cat()
cat.say()
La «classe humaine» et la «classe Cat» héritent respectivement de la «classe objet et de la classe Mixin». C'est vraiment juste un «héritage multiple», mais la raison pour laquelle je donne différents titres et raconte à nouveau la même histoire est ** parce qu'il est facile d'ajouter des fonctions à plusieurs classes **. Le «trait» de PHP était également un mécanisme permettant d'ajouter facilement des fonctions à plusieurs classes. La même chose peut être exprimée en utilisant «l'héritage multiple» en Python.
La plupart des utilisations de «l'héritage multiple» en Python sont la «classe Mixin». Je pense qu'il sera utilisé dans Django, alors souvenez-vous-en!
Au fait, dans cet exemple, la classe Mixin
est une sous-classe de la classe objet
, donc la classe humaine
et la classe Cat
peuvent être définies comme suit.
class Human(Mixin):
pass #pass signifie "ne rien faire".
class Cat(Mixin):
pass
C'est juste une histoire d'héritage. ..
Cette fois, j'ai présenté comment créer une classe et en hériter. Cela semble compliqué car il y a beaucoup de choses à faire, mais c'est très pratique et amusant à maîtriser!
Que dois-je faire ensuite? Il est indécis. ..
Recommended Posts