親切LOGIN

親切

1. クラスを定義する

クラス定義の構文形式は次のとおりです:

class ClassName:
    <statement-1>
    .
    .
    .
    <statement-N>

クラスも属性とメソッドで構成されます。クラスの属性を設定するには、コンストラクターが必要です。

クラスのコンストラクターは次のとおりです。

def __init__(self,[...):

クラスが init() メソッドを定義している場合、インスタンス化クラスの操作は自動的に init() メソッドによって呼び出されます。

コンストラクターがデストラクターに対応している場合は、クラスの作成時にコンストラクターを使用してプロパティを設定でき、クラスが破棄されるときにデストラクターが呼び出されます。

デストラクターの構文は次のとおりです:

def __del__(self,[...):

子供が注意深く観察すると、クラス メソッドと通常の関数の間には特別な違いがあることがわかります。追加の最初のパラメーター名が必要です。 、慣例により、その名前は self です。

それでは、自己とは何を表しているのでしょうか?

例を見て、例を通して答えを見つけることができます:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
class Test:
    def prt(self):
        print(self)
        print(self.__class__)
t = Test()
t.prt()

出力結果を観察します:

776927ef1b515b00d2ff42650fd27f4.png実行結果からはっきりとわかります。 self はクラスのインスタンスを表し、現在のオブジェクトのアドレスを出力します。self.__class__ はクラスを指します。

もちろん self は Python のキーワードではありません。つまり、他の文字に置き換えれば正常に実行できます。 Python でクラスを定義する際の歴史的問題

Python のバージョンを繰り返す中で、はクラスに関する質問です 残された歴史的問題は、新しいスタイルのクラスと古いスタイルのクラスの間の問題です。具体的には、次のコードを見てください:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# 旧式类
class OldClass:
    pass
# 新式类
class NewClass(object):
    pass

ご覧のとおり、クラスを定義するさまざまな方法は次のとおりです。ここで使用すると、最大の違いがわかります. つまり、新しいスタイルのクラスはオブジェクト クラスを継承します. Python2 では、クラスを定義するときに新しいスタイルのクラスを定義するのが最善です. もちろん、この問題はそうではありませんPython3 のすべてのクラスは新しいスタイルのクラスであるため、Python3 にも存在します。

それでは、新しいスタイルのクラスと古いスタイルのクラスの違いは何でしょうか?

次のコードを実行します:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# 旧式类
class OldClass:
    def __init__(self, account, name):
        self.account = account;
        self.name = name;
# 新式类
class NewClass(object):
    def __init__(self, account, name):
        self.account = account;
        self.name = name;
if __name__ == '__main__':
    old_class = OldClass(111111, 'OldClass')
    print(old_class)
    print(type(old_class))
    print(dir(old_class))
    print('\n')
    new_class=NewClass(222222,'NewClass')
    print(new_class)
    print(type(new_class))
    print(dir(new_class))

出力結果を注意深く観察して比較すると、それを観察できるようになります。Pyhton3 での出力結果はまったく同じであることに注意してください。 . Python3では新しい形式のクラスと古い形式のクラスの問題がないからです。

次のセクション
コースウェア