親切
1. クラスを定義する
クラス定義の構(gòu)文形式は次のとおりです:
class ClassName: <statement-1> . . . <statement-N>
クラスも屬性とメソッドで構(gòu)成されます。クラスの屬性を設(shè)定するには、コンストラクターが必要です。
クラスのコンストラクターは次のとおりです。
def __init__(self,[...):
クラスが init() メソッドを定義している場合、インスタンス化クラスの操作は自動(dòng)的に init() メソッドによって呼び出されます。
コンストラクターがデストラクターに対応している場合は、クラスの作成時(shí)にコンストラクターを使用してプロパティを設(shè)定でき、クラスが破棄されるときにデストラクターが呼び出されます。
デストラクターの構(gòu)文は次のとおりです:
def __del__(self,[...):
子供が注意深く観察すると、クラス メソッドと通常の関數(shù)の間には特別な違いがあることがわかります。追加の最初のパラメーター名が必要です。 、慣例により、その名前は self です。
それでは、自己とは何を表しているのでしょうか?
例を見て、例を通して答えを見つけることができます:
#!/usr/bin/env python3 # -*- coding: UTF-8 -*- class Test: def prt(self): print(self) print(self.__class__) t = Test() t.prt()
出力結(jié)果を観察します:
実行結(jié)果からはっきりとわかります。 self はクラスのインスタンスを表し、現(xiàn)在のオブジェクトのアドレスを出力します。self.__class__ はクラスを指します。
もちろん self は Python のキーワードではありません。つまり、他の文字に置き換えれば正常に実行できます。 Python でクラスを定義する際の歴史的問題
Python のバージョンを繰り返す中で、はクラスに関する質(zhì)問です 殘された歴史的問題は、新しいスタイルのクラスと古いスタイルのクラスの間の問題です。具體的には、次のコードを見てください:
#!/usr/bin/env python # -*- coding: UTF-8 -*- # 舊式類 class OldClass: pass # 新式類 class NewClass(object): pass
ご覧のとおり、クラスを定義するさまざまな方法は次のとおりです。ここで使用すると、最大の違いがわかります. つまり、新しいスタイルのクラスはオブジェクト クラスを継承します. Python2 では、クラスを定義するときに新しいスタイルのクラスを定義するのが最善です. もちろん、この問題はそうではありませんPython3 のすべてのクラスは新しいスタイルのクラスであるため、Python3 にも存在します。
それでは、新しいスタイルのクラスと古いスタイルのクラスの違いは何でしょうか?
次のコードを?qū)g行します:#!/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))
出力結(jié)果を注意深く観察して比較すると、それを観察できるようになります。Pyhton3 での出力結(jié)果はまったく同じであることに注意してください。 . Python3では新しい形式のクラスと古い形式のクラスの問題がないからです。