Pythonの基礎知識(七):類、対象と魔法の方法


クラスとオブジェクト
1.オブジェクト=属性+メソッド
オブジェクトはクラスのインスタンスです.すなわち、クラスは主にオブジェクトの構造を定義し、クラスをテンプレートとしてオブジェクトを作成します.クラスには、メソッド定義だけでなく、すべてのインスタンスが共有するデータも含まれます.
  • パッケージ:情報隠蔽技術は、キーワードclassを使用してPythonクラスを定義することができ、キーワードの後ろにはクラスの名前、セミコロン、クラスの実装が続く.【例】
  • class Turtle:  # Python             
        """          """
        #   
        color = 'green'
        weight = 10
        legs = 4
        shell = True
        mouth = '  '
        #   
        def climb(self):
            print('          ...')
        def run(self):
            print('         ...')
        def bite(self):
            print('      !!')
        def eat(self):
            print('   ,   ...')
        def sleep(self):
            print('  ,  ,  ,zzz')
    tt = Turtle()
    print(tt)
    # <__main__.turtle object="" at=""/>
    print(type(tt))
    # 
    print(tt.__class__)
    # 
    print(tt.__class__.__name__)
    # Turtle
    tt.climb()
    #           ...
    tt.run()
    #          ...
    tt.bite()
    #       !!
    # Python     。   type   
    print(type(Turtle))
    # 
  • 継承:子クラスが親クラス間のデータとメソッドを自動的に共有するメカニズム【例】
  • class MyList(list):
        pass
    lst = MyList([1, 5, 2, 7, 8])
    lst.append(9)
    lst.sort()
    print(lst)
    # [1, 2, 5, 7, 8, 9]
  • マルチステート:異なるオブジェクトが同じ方法に対して異なる行動に応答する[例]
  • class Animal:
        def run(self):
            raise AttributeError('          ')
    class People(Animal):
        def run(self):
            print('    ')
    class Pig(Animal):
        def run(self):
            print('pig is walking')
    class Dog(Animal):
        def run(self):
            print('dog is running')
    def func(animal):
        animal.run()
    func(Pig())
    # pig is walking

    2.selfとは何ですか.
    PythonのselfはC++のthisポインタに相当する.【例】
    class Test:
        def prt(self):
            print(self)
            print(self.__class__)
    t = Test()
    t.prt()
    # <__main__.test object="" at=""/>
    # 

    クラスのメソッドは、通常の関数とは特別な違いしかありません.通常、selfという名前の2つ目のパラメータ名(インスタンス、すなわちオブジェクト自体に対応する)が追加されなければなりません.メソッドを呼び出すとき、パラメータselfに対応するパラメータを明確に提供する必要はありません.【例】
    class Ball:
        def setName(self, name):
            self.name = name
        def kick(self):
            print("  %s,   ,   ..." % self.name)
    a = Ball()
    a.setName(" A")
    b = Ball()
    b.setName(" B")
    c = Ball()
    c.setName(" C")
    a.kick()
    #    A,   ,   ...
    b.kick()
    #    B,   ,   ...

    3.Pythonの魔法の方法
    Pythonのオブジェクトは生まれながらにしていくつかの不思議な方法を持っていて、それらはオブジェクト向けのPythonのすべてです...それらはあなたのクラスに魔力を加えることができる特殊な方法です...もしあなたのオブジェクトがこれらの方法のいずれかを実現したら、この方法は特殊な状況の下でPythonに呼び出されます.これらはすべて自動的に発生します...クラスには__init__(self[, param1, param2...])という魔法の方法があります.この方法はクラスがインスタンス化されると自動的に呼び出されます.【例】
    class Ball:
        def __init__(self, name):
            self.name = name
        def kick(self):
            print("  %s,   ,   ..." % self.name)
    a = Ball(" A")
    b = Ball(" B")
    c = Ball(" C")
    a.kick()
    #    A,   ,   ...
    b.kick()
    #    B,   ,   ...