ホームページ > バックエンド開発 > Python チュートリアル > Pythonで親クラスを書き換える方法は何ですか?

Pythonで親クラスを書き換える方法は何ですか?

PHPz
リリース: 2023-05-04 23:52:13
転載
2101 人が閲覧しました

1. 基本的なアプリケーション

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)
ログイン後にコピー

2. 実践的なアプリケーション

#用元类实现单例模式
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))
ログイン後にコピー

3. 注

1. クラスが多重継承を持つ場合、クラスは複数の親から継承します。同じ親クラス A を持っています。親クラスを書き換えるときは、

メソッド 1: 親クラス名.メソッド名 (オブジェクト)

  • Parent に注意する必要があります。クラス A は複数回呼び出されます (継承の数に応じて)

  • #親クラスをオーバーライドするときに、必要に応じて必須パラメーターを渡します

メソッド 2 :super(クラス名, オブジェクト).メソッド名()

  • 親クラス A は 1 回だけ呼び出されます

  • 親クラスのメソッドはすべてのパラメータを渡す必要があります

2。クラスに継承があり、対応する変数がサブクラスでオーバーライドされている場合、親クラスの変数を変更してもサブクラスには影響しません。

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)
ログイン後にコピー
出力結果

1 1 1

1 2 1
3 2 3

以上がPythonで親クラスを書き換える方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート