Maison > développement back-end > Tutoriel Python > Quelles sont les méthodes pour réécrire les classes parentes en Python ?

Quelles sont les méthodes pour réécrire les classes parentes en Python ?

PHPz
Libérer: 2023-05-04 23:52:13
avant
2103 Les gens l'ont consulté

1. Application de base

class Animal(object):
    def eat(self):
        print("动物吃东西")


class Cat(Animal):
    def eat(self):
        print("猫吃鱼")
        # 格式一:父类名.方法名(对象)
        Animal.eat(self)
        # 格式二:super(本类名,对象).方法名()
        super(Cat, self).eat()
        # 格式三:super()方法名()
        super().eat()


cat1 = Cat()
cat1.eat()
print(cat1)
Copier après la connexion

2. Application pratique

#用元类实现单例模式
class SingletonType(type):
    instance = {}

    def __call__(cls, *args, **kwargs):
        if cls not in cls.instance:
            # 方式一:
            # cls.instance[cls] = type.__call__(cls, *args, **kwargs)
            # 方式二
            # cls.instance[cls] = super(SingletonType, cls).__call__(*args, **kwargs)
            # 方式三
            cls.instance[cls] = super().__call__(*args, **kwargs)
        return cls.instance[cls]


class Singleton(metaclass=SingletonType):
    def __init__(self, name):
        self.name = name


s1 = Singleton('1')
s2 = Singleton('2')
print(id(s1) == id(s2))
Copier après la connexion

3 Remarque

1. faire attention à

Méthode 1 : Nom de la classe parent (objet)

  • La classe parent A sera appelée plusieurs fois (en fonction du nombre d'héritage)

  • Lors de la réécriture de la classe parent, transmettez le informations requises selon les besoins Paramètres

Méthode 2 : super(nom de la classe, objet).Nom de la méthode()

  • La classe parent A ne sera appelée qu'une seule fois

  • Le remplacement de la méthode de la classe parent doit transmettre tous les paramètres

2. Lorsqu'une classe a un héritage et que les variables correspondantes ont été réécrites dans la sous-classe, la modification des variables de la classe parent n'affectera pas la sous-classe

class Parent(object):
    x = 1

class Child1(Parent):
    pass

class Child2(Parent):
    pass

print(Parent.x, Child1.x, Child2.x)
Child1.x = 2
print(Parent.x, Child1.x, Child2.x)
Parent.x = 3
print(Parent.x, Child1.x, Child2.x)
Copier après la connexion

Résultats de sortie

1 1 1
1 2 1
3 2 3

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal