Day 15-Python-クラスとオブジェクト-2019/01/11

6705 ワード

プログラミング思想
1. ---問題が発生したら、直接論理をコードに変換する.論理的思考とアルゴリズムをツールとする.2. ---問題が発生したら、対応する機能を持つ関数を探して、書きたいです.関数をツールとします.3. ---問題が発生した場合、対応する機能とデータを提供するためにクラスがあるかどうかを考慮する.クラスとオブジェクトをツールとします.補足:pythonは関数式プログラミングもオブジェクト向けプログラミングもサポートします.
認識クラスとオブジェクト(宣言)
1.クラスとは何か、オブジェクトとは何か は、同じ機能と同じ属性を有するオブジェクトの集合である.クラスは抽象的です. はクラスの例である.オブジェクトは具体的で、具体的な属性、具体的な機能があります.例えば:人は類で、魯迅は人類の対象の車は類で、階下の交差点のそばの車は対象のコンピュータは類で、私の机の上でこの黒いコンピュータは対象です
2.クラスの宣言
クラスの内容は、1.機能(関数)2.属性(変数/属性)a. classクラス名:----クラスの内容b. class---python宣言クラスのキーワード ---要求:識別子----規範:アルパカ式命名(アルファベット大文字で異なる単語を区別し、PEP 8は下線).クラス名の最初のアルファベットは大文字---固定書き方 :クラスを含む方法、属性、説明ドキュメントの方法は、クラス内の関数属性がクラス内の変数であることを宣言することです.
3.オブジェクトの宣言 :クラス名()---指定したクラスのオブジェクトを作成し、そのオブジェクトを返します.
注意:クラスのオブジェクトを作成する場合は、クラスの構築方法を呼び出します.この方法では、何回呼び出されたか、何個のオブジェクトがあります.
オブジェクトメソッド
classクラス名:---クラス内の属性---クラス内のメソッド
1.クラス内のメソッド
クラスに宣言された関数は、メソッドクラスのメソッドです.オブジェクトメソッド(インスタンスメソッド)、クラスメソッド、静的メソッドが含まれます.
2.対象方法:a. 1.クラスに直接宣言する方法はオブジェクトメソッドであり、クラスのオブジェクトのみで呼び出すことができる.デフォルトパラメータself 3がある. . ()によって呼び出す(オブジェクトメソッドはオブジェクトによって呼び出される)b. self.オブジェクトを介してオブジェクトメソッドを呼び出す場合、selfはパラメータを伝達する必要はありません.現在のオブジェクトをself 2に自動的に渡すからです.現在のオブジェクト:現在のメソッドを呼び出すオブジェクト(誰がメソッドを呼び出すかselfは誰か)現在のクラスのオブジェクトができること、selfができること
補足:1.クラスを宣言するときにその内容が実行されます.オブジェクトメソッドを呼び出し、self以外のパラメータを渡す.
Initメソッドと構造メソッド
1.initメソッド:_init __
Initメソッドは、作成したオブジェクトを初期化するためのクラス内の特殊なオブジェクトメソッドであり、クラスを介してオブジェクトを作成すると、自動的にinitメソッドが呼び出されます.
2.構造方法
a.関数名とクラス名のような関数は、オブジェクトを作成するための構造方法です.b.pythonでクラスを宣言すると、このクラスに対応する構造方法が自動的に作成されます.コンストラクションメソッドを呼び出してオブジェクトを作成すると、内部ではまずメモリにスペースを開いてオブジェクトを保存し、作成したオブジェクトで__を呼び出します.init__オブジェクトを初期化する方法.初期化後、オブジェクトには必要なプロパティがあります._init__メソッド呼び出しが終了すると、オブジェクトが返されます.
オブジェクトを作成する手順は次のとおりです.
def Person():
       =     
      .__init__()
    return   
クラスの場合_init__メソッドはself以外にもパラメータがありますが、オブジェクトを作成するときに構築メソッドにパラメータを渡すことでinitメソッドにパラメータを渡す必要があります.
構築メソッドの擬似コード

#         
def my_init(a,b):
    print('a',a, b)
    print('my_init')

def my_Dog(*args, **kwargs):
    my_init(*args, **kwargs)

dog1 = my_Dog(*args, **kwargs)

オブジェクトの作成時にmy_を呼び出すDog関数並列パラメータ、my_Dog関数はmy_を呼び出しますInit関数、前に得たパラメータをmy_に渡すinit関数.
補足:1.クラスの中で先頭かつ_エンディングの方法を魔法の方法と言います.アクティブな呼び出しは必要ありません.システムは自動的に呼び出します.2.initメソッドは、オブジェクトの作成時にのみ呼び出されます.3.構築方法のパラメータは、init方法のパラメータによって決定され、一つ一つ対応する.
オブジェクトのプロパティ
1.オブジェクト属性
a.オブジェクト属性:属性の値はオブジェクトによって異なります.この属性はオブジェクト属性として宣言する必要があります.例えば、人の名前の異なる宣言の位置:initメソッドで宣言する方法:'self. = 'で宣言する(ここでの属性名はオブジェクト属性であり、値は属性の字面量である)使用方法:オブジェクト属性は' . 'で使用する.
2.クラスのフィールド
b.クラスのフィールド:属性の値はオブジェクトによって異なることを後悔せず、この属性はクラスのフィールドとして宣言される.例えば、人間は考える.宣言の位置:直接クラスの中に宣言して、関数の外の変数はクラスのフィールドです.宣言の方式:' = '使用方法:' . 'の方式で使用する
補足:initメソッドでオブジェクトのプロパティを宣言すると、オブジェクトを初期化します.self.nameはオブジェクト内のname属性であり、name 1はname属性の字面量である.name 1もage 1も構造方法 ()から伝わってきた.
    #  init         
    def __init__(self, name1='', age1=0): #          ,         
        self.name = name1 # name    ,name1   
        self.age = age1

オブジェクト属性の削除
pythonのオブジェクトのプロパティ、すなわちオブジェクトのプロパティは、削除変更をサポートします.
補足:initメソッドの上に__を追加slots__魔法は、現在のクラスのオブジェクトが最大でどの属性を持つかを制約します.またinitメソッドに書かれたパラメータは,slotsよりも少なく,多くはできない.
1.チェック(オブジェクト属性の取得) . ---指定されたオブジェクトの指定された属性値を取得する.属性が存在しない場合はエラーが表示されます.辞書[key]と同じです.getattr( , :str, )---指定されたオブジェクトの指定された属性値を取得する.プロパティが存在しない場合、デフォルト値に値を割り当てた場合、プログラムはエラーを報告せず、デフォルト値を返します.デフォルト値を書かないと、プログラムもエラーを報告します.
2.増減 . = ---属性が存在する場合、属性を変更する値である.属性が存在しない場合は属性を追加します.setattr( , :str, )---属性が存在する場合、属性を変更する値である.属性が存在しない場合は属性を追加します.
3.削除del . delattr( , :str)補足:delは任意のタイプのデータを削除できます
注意:getattr,setattr,delattrの3つのメソッドでは、属性名は文字列タイプでなければなりません.
組み込み属性
組み込みプロパティとは、クラスを作成するときに自動的に追加されるプロパティです.(実は継承によって取得されたものです)
補足:オブジェクトprint(p 1)を印刷するのは、実際にこのオブジェクトが存在するモジュール、クラス、アドレスである.実質的には、印刷オブジェクト呼び出し_repr __で行ないます.オブジェクトの印刷フォーマットをカスタマイズできます.この関数の戻り値は文字列でなければなりません.例:
    def __repr__(self):
        # return '{%s.%s object at %s}' % (self.__class__.__module__, self.__class__.__name__, hex(id(self)))
        return str(self.__dict__)[1:-1] + 'at ' + hex(id(self))

old_input:<__main__.person object="" at="">
new_input:'name': '  ', 'age': 18, 'sex': ' 'at 0x1e6fdd8

1.クラス._name __ --- クラス名の取得(結果は文字列)
print(Person)
class_name = Person.__name__
print(Person, class_name)

input: main.Person'> main.Person'>Person 印刷されたclass_nameは文字列タイプで、文字列として使用できます.
2.オブジェクト._class__ --- オブジェクトに対応するクラスを取得(結果はクラス)
 my_class = p1.__class__
    print(my_class)

3.クラス._doc__ --- クラスの説明ドキュメント(結果は文字列)を取得
print(Person.__doc__)
    print(int.__doc__)

    #     p1         
    print(p1.__class__.__doc__)

4.オブジェクト._dict __ --- オブジェクトを辞書に変換し、属性と値を辞書のキー値のペアとします.(結果は辞書)当は__にあげましたsolts __ 属性付与後、オブジェクトの_dict __属性は使用できません
print(p1.__dict__)
    print(p2.__dict__)
    print(Person.__dict__)

5.クラス._module __ --- 現在のクラスが存在するモジュールのモジュール名(結果は文字列)を取得します.
print(Person.__module__)

6.クラス._base__ --- 現在のクラスの親/サポートのマルチ継承を取得するため、結果はメタグループに戻ります.
print(Person.__bases__)


クラスメソッドと静的メソッド
1.対象メソッド
a.どのように宣言しますか:クラスの中で直接b.特徴を宣言します: self、呼び出す時selfはパラメータを伝達しなくて、誰が呼び出すのは誰を指します.c.どのように呼び出すか:オブジェクト.方法()--- 2.クラスメソッド
a.どのように宣言します:関数を宣言する前に@classmethod b.特徴: clsをプラスして、呼び出す時clsはパラメータを伝達しなくて、システムは自動的にこの関数を呼び出すクラスをclsに伝達します.(clsは誰が呼び出すかが誰を指すので、クラスメソッドはクラスでしか呼び出せないので、clsは現在のクラスです.) ,cls 。 c.クラスの呼び出し方法方法()--- 3.静的方法
a.どのように宣言します:関数を宣言する前に@staticmethod b.特徴をプラスします: c.どのように呼び出します:クラスを通じて呼び出して、 . ()4.クラスでどのように選択するかクラス内の関数の機能を実装するためにオブジェクトの属性を使用する必要がある場合、この関数はオブジェクトメソッドとして宣言されます.実装関数の機能は、オブジェクト属性の を必要とせず、クラスのフィールドが必要であればクラスメソッドとして宣言される.実装関数機能は、オブジェクト属性もクラスのフィールドも必要とせず、静的メソッドとして宣言される.