paquet
Peut-être simplement compris comme caché tous les détails de mise en œuvre cachée peut, ne fournit une interface de programmation simple au monde extérieur. Nous en fait, la méthode des données opérationnelles et les données encapsulées dans la méthode définie dans la classe jusqu'à, après que nous créons un objet, juste pour donner un objet envoie un message (appeler une méthode) du code peut être exécuté, qui signifie que nous ne vous devez connaître le nom de la méthode et les paramètres entrants (méthode vue extérieure), sans avoir besoin de connaître les détails de mise en œuvre interne de la méthode (vue interne de la méthode).
Exercice: Définir une classe implémente un certain nombre de plusieurs
import time
class Clock:
def __init__(self):
# 获取当前系统时间
t = time.localtime()
self._hour = t.tm_hour
self._minute = t.tm_min
self._second = t.tm_sec
def run(self):
self._second += 1
if self._second == 60:
self._second = 0
self._minute += 1
if self._minute == 60:
self._minute = 0
self._hour += 1
if self._hour == 24:
self._hour = 0
def show(self):
return "%02d:%02d:%02d" % (self._hour, self._minute, self._second)
def main():
clock = Clock()
while True:
# 将光标退到当前行首
print("\r%s" % clock.show(), end="")
time.sleep(1)
clock.run()
if __name__ == '__main__':
main()
Hériter
Dans la vraie vie, l' héritage se réfère généralement aux parents des enfants de propriété Hériter, comme indiqué ci - dessous
pourrait, les résultats suivants ...
le programme est décrit successivement appartient aux relations entre les choses, comme les chats et les chiens appartiennent à l'animal, le programme sera en mesure de hérité des animaux décrits comme les chats et les chiens, même, Bali et le chat persan hérité de chats, et le Shar Pei sont hérités des chiens dalmates, comme indiqué ci - dessous: les
sous - classes héritent des propriétés communes de la classe mère et la commune méthode, la classe parente des propriétés privées et les méthodes ne peut être héritée.
héritage unique
Hériter général une seule classe parente est appelée seul héritage, ne peut hériter d'une classe parent en Java et d' autres langage statique, il n'existe pas un héritage unique et multiple.
Exemple de code:
# 定义一个父类,如下:
class Cat(object):
def __init__(self, name, color="白色"):
self.name = name
self.color = color
def run(self):
print("%s--在跑"%self.name)
# 定义一个子类,继承Cat类如下:
class Bosi(Cat):
# 子类没有实现__init__方法,则自动调用父类的__init__方法
def setNewName(self, newName):
self.name = newName
def eat(self):
print("%s--在吃"%self.name)
bs = Bosi("印度猫")
print('bs的名字为:%s'%bs.name)
print('bs的颜色为:%s'%bs.color)
bs.eat()
bs.setNewName('波斯')
bs.run()
"""
输出结果:
bs的名字为:印度猫
bs的颜色为:白色
印度猫--在吃
波斯--在跑
"""
L'héritage multiple
Comme on peut le voir d'après la figure, que l' on appelle l' héritage multiple, à savoir une pluralité de classe parent sous-classe, et celui - ci ayant des caractéristiques.
L' héritage multiple est formaté comme suit:
# 定义一个父类
class A:
def printA(self):
print('----A----')
# 定义一个父类
class B:
def printB(self):
print('----B----')
# 定义一个子类,继承自A、B
class C(A,B):
def printC(self):
print('----C----')
obj_C = C()
obj_C.printA()
obj_C.printB()
"""
输出结果:
----A----
----B----
"""
Si par exemple multiple héritage ci-dessus, si la classe parente A et parent de classe B, il existe une méthode du même nom, le temps de passer par l'appel de la sous-classe, qui appelle?
class A:
def print(self):
print('----A----')
class B:
def print(self):
print('----B----')
# 定义一个子类,继承自A、B
class C(A,B):
pass
obj_C = C()
obj_C.print()
"""
输出结果:
----A----
"""
En fait , l'ordre d'appel dépend de la classe C qui hérite de la première classe, première classe héritée sera d' abord appelé.
Voir aussi la séquence temporelle de la recherche de sujet pour la classe C par __mor__, le code ci - dessus
print(C.__mro__)
"""
输出结果:
(<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)
"""
Procédé remplacer la classe de parent
Le soi-disant réécrite, est une sous-classe du même nom et une méthode de la classe parent, une méthode dans une sous-classe va remplacer la méthode de la classe parent du même nom
class Cat:
def sayHello(self):
print("halou-----1")
class Bosi(Cat):
def sayHello(self):
print("halou-----2")
class Bali(Cat):
def sayHello(self):
print("halou-----3")
bosi = Bosi()
bali= Bali()
bosi.sayHello()
bali.sayHello()
"""
输出结果:
halou-----2
halou-----3
"""
Par la méthode de réécriture , nous pouvons faire le même comportement de la classe parente a une autre version dans une sous - classe pour atteindre, lorsque nous appelons cette sous - classe passes réécrite, différentes sous - classes d'objets présentent un comportement différent, c'est le polymorphisme (polymorphisme) .
Appelez la méthode de la classe parent
class Cat:
def __init__(self,name):
self.name = name
class Bosi(Cat):
def __init__(self,name):
# 调用父类的__init__方法1(python2)
#Cat.__init__(self,name)
# 调用父类的__init__方法2
#super(Bosi,self).__init__(name)
# 调用父类的__init__方法3
super().__init__(name)
self.color = 'yellow'
def getName(self):
return self.name
bosi = Bosi('xiaohua')
print(bosi.name)
print(bosi.color)
"""
输出结果:
xiaohua
yellow
"""
Résumé:
- Si ce qui précède besoin d'appeler mentionné dans les sous-classes des besoins du constructeur de la classe parent pour construire explicitement la classe parente ou constructeur de la classe mère ne l'emporte pas, la sous-classe ne remplace pas la __init __, sous-classe instanciable , il appellera automatiquement la __init __ définition de la classe mère.
- Si la sous - classe remplace la __init__, la sous - classe instanciable, il ne sera pas appeler la __init __ classe parente déjà définie.
- Si la réécriture du __init __, configuré pour hériter de la classe parente, la méthode suivante peut être utilisée:
- super (sous - classe, Self). init (paramètre 1, paramètre 2, ...)
- Nom du parent. Le init (Auto, paramètre 1, paramètre 2, ...)
polymorphisme
Le concept de polymorphisme est utilisé en Java et C # ce type de langues fortement typé, tout en Python préconisant « frappe de canard. »