魔法のいくつかの一般的な方法でのPython

1、__ INIT __()メソッド

  • インスタンスが作成されたときにオブジェクトを作成するときにデフォルトで呼び出される初期化メソッド呼び出し、。
  • オブジェクトを作成するときに、2つのパラメータを渡された場合、最初のパラメータは、例えば、2つの外部パラメータを必要として__ __ init()メソッドは、__init __()メソッド他の自己、自己パラメータのデフォルト名を持ちます__init __(自己、X、Y)。

我々はオブジェクトにこの属性を追加する前に:

クラスの学生:
    パス
   
STU1 =学生()

stu1.name = "ジョン・ドウ"
stu1.age = 18れます

**今、私たちは、コード**簡素化する__init __()メソッドを使用
:クラスの学生を
    __init __(自己、名前、年齢)DEF:
        self.name名=
        self.age =年齢
   
STU1 =学生( "ジョー・スミス"、18)

それは、より簡潔なコードを見てではありません

2、STR()メソッド

  • 一般的なオブジェクトの説明、又は所望の出力の独自の定義の結果。
  • )(strの呼び出しを呼び出すとき__str __()、すなわち、オブジェクトが文字列型にキャストされます。
  • 印刷()オブジェクトの出力とも呼ばれる__str __()メソッド、限り、それらが定義されているよう__str __()メソッドを使用する場合は、このメソッドの戻り値のデータを印刷します。

**:** __str __()メソッド定義されていない
クラスの学生:
    __init __ DEF(セルフ、名前、年齢):
        self.name名は=
        self.age =年齢
   
STU1 =学生( "ジョー・スミス"、18がある)
を印刷( STU1)

S =のSTR(STU1)
プリント(S)

"" "
输出结果:
<。0x03C3BCD0で__ __メイン学生対象>
<。__ __メイン0x03C3BCD0の学生対象>
"""

オブジェクトのデフォルトのメモリアドレスを返す__str __()メソッドを定義されていません。
**:**定義さ__str __()メソッドは、そのようなことである
クラスの学生:
    __init __ DEF(セルフ、名前、年齢):
        self.name名=
        self.age =年齢
    DEF __str __(自己):
        戻り値「名:% S \トン年齢:D% "%(self.name、self.age)
   
STU1 =学生("ジョー・スミス」、18がある)
印刷(STU1)

S =のSTR(STU1)
プリント(S)

「」「
出力:
名前:ジョー・スミス年齢:18
名:ジョー・スミス年齢:18
」「」

3、デル()メソッド


オブジェクトが削除された場合、Pythonインタプリタは、この方法が__del __()メソッドで、メソッド呼び出しがデフォルトになります。
 まず、それは最初のコンセプトを理解しておく必要があり、それは、オブジェクトの数への参照です。我々は、オブジェクト参照の数、戻り値を参照し= +1の実際の数を測定するためのsysモジュールGETREFCOUNT()を必要とします。2オブジェクト番号への参照が1の場合、実際のリターンを説明するために、そのオブジェクトへの参照が可変です。
SYSインポート
クラスA:
    パス
= A()
作成したオブジェクトクラスになりました唯一の変数の参照#
印刷(sys.getrefcount(a))は
、 " ""
出力
2
" ""
変数bを作成するために、今では#をまた、参照オブジェクトに引用、それは参照番号に追加され、参照の実際の数は2となる
B =
プリント(sys.getrefcount(a))は
「」「
出力:
3
」「」

Pythonインタプリタが検出された場合、実際に参照されるオブジェクトの数が0で、オブジェクトは、対応するコール__del __()メソッドが存在するであろう、削除されます。別の場合には、対応するメモリが解放され、その後、それが__del __()メソッドを実行する、プログラムが完全に上に実装されていることです。
:これは、プログラムが正常に実行完了した場合で
インポートSYSの
クラスA:
    DEF __del __(自己):
        印刷(「オブジェクトが破棄される」)
A = A()
「」「
出力:
オブジェクトが破棄されます
」「」

変数参照を手動で削除する場合もある:
インポートSYSの
クラスAは:
    DEF __del __(自己):
        印刷(「オブジェクトが破棄される」)
このとき、実際の参照の数をA = A()#1
B =#これを数が実際に参照されている場合は2

印刷(「変数Aが削除」)
デルA#、場合文献1の実際の数の変数を削除します

印刷(「変数bを削除」)
デル#変数bを削除B、実際の参照番号が0である、Pythonインタプリタは、オブジェクトが削除され、それが呼び出され__del __()メソッドのある
プリント(「プログラム終了」)
」 「」
出力:
変数を削除
B削除可変
オブジェクトが破棄され
、プログラムの終了を
。「」 "

4、新しい()メソッド

•__new __クラスメソッドは、インスタンスが作成されたときに呼び出され、それさえも早い時間__init __よりもコール。
•__new __ CLSクラスの代表がインスタンス化されるように、少なくとも1つのパラメータを持って、このパラメータは自動的にインスタンス化でPythonインタプリタによって提供されています。
•__new __アウト__new__親クラスのインスタンスを返す、またはダイレクトアウト__new__の対象となることができ、に特別な注意を払って自分の__new__を達成するために、戻り値を持っていることのインスタンスをインスタンス化するために戻り、この時点なければなりません例。python3では、オブジェクトの各クラスは、デフォルトの親クラスを継承します。
•__init__パラメータはノーリターン値init__、自己を持って戻り__new__の一例である、__ init__は基底__new__に他のいくつかの初期化操作を行うことができ、__
クラスA:
    __init __(自己)DEF:
        印刷(「initメソッドを呼び出します」)

    __ __new DEF(CLS):
        印刷する( "新しいメソッドを呼び出します")
        スーパーを(返す).__新しい__(CLS)
A = A()

「」「
出力:
新しいメソッドが呼び出す
initメソッドを呼び出します
。」「」

4、開発:__ __newは次のように単一の実施形態のモードコードを達成するためのメソッドをオーバーライドすることができます:

クラスは:
    #は外にオブジェクトのインスタンスを格納するため、民間の属性クラスを定義し
    _isinstance =なし
   
    DEF __(CLS)を__newない:
        印刷(「新しいメソッドを呼び出す」)
        _isinstanceがNone場合#は、インスタンスを作成し、決定しますそれ以外の場合は、直接_isinstance返さ
        :IFないcls._isinstance
            cls._isinstance =スーパー().__新しい新しい__(CLS)
        の戻りcls._isinstanceを


プリント(ID(A))
プリント(ID(A))
プリント(ID(A))
プリント(ID(A))
"" "
输出结果:
19888488
19888488
19888488
19888488
"""

プログラムの実行中に5、__ __スロットは、我々はすべてのPythonは動的言語である知っている属性は、プロパティを追加することができます。我々はインスタンスのプロパティを制限したい場合はどうしますか?例えば、Personインスタンスの属性の名前のみと年齢を加えます。先の時間制限に達するために、Pythonはクラス時間の定義を可能にする、クラスのインスタンスの属性を制限する特別な⼀__slots__変数の定義を追加することができます。

クラスPerson(オブジェクト):
    __slots__ =( "名前"、 "年齢")
P =人()
P.name = "⽼王"
P.age = 20
P.score = 100

"" "
输出结果:
トレースバック(最新の呼び出しの最後):
  ファイル"の<input>"、6行目、中に<モジュール>
はAttributeError:「人オブジェクトが'スコア'は属性を持っていません
"""

注:使用は注意を払う__slots__、__サブメニューのクラス継承の使用からクラスの唯一の現在のインスタンスのslots__定義された属性は、使用動作していません。

おすすめ

転載: www.linuxidc.com/Linux/2019-08/160212.htm