Python定義クラスと作成オブジェクト


目次
1.クラスの定義
2.オブジェクトの作成と使用(オブジェクトはインスタンスとも呼ばれます)
1)インスタンス変数の追加または削除
2)インスタンスメソッドの追加
オブジェクト向けプログラミングの3つの特徴:パッケージ、継承、マルチステート;
1.クラスの定義
構文の形式:
#     :
class   :
        ...
       ...
      ...

クラス名:1つ以上の単語が接続され、各単語の頭文字が大文字で、残りのアルファベットはすべて小文字で、単語と単語の間に区切り記号は使用されません.
クラスに含まれるクラス変数は動的に増加または削除することができ、プログラムはクラス定義の中で新しい変数に値を付与することはクラス変数を増加することであり、プログラムはどこでも既存のクラスに変数を増加することができ、del文を通じて既存のクラスのクラス変数を削除することができる.
オブジェクトの変数は動的に増加または削除することもでき、オブジェクトの新しい変数に値を割り当てることが変数を増加する限り、del文で既存のオブジェクトの変数を削除することができます.
定義メソッドは定義関数と同じですが、クラス内のメソッドの最初のパラメータはselfとして定義され、メソッドを呼び出すオブジェクトを自動的に指します.
特別な方法:_init__,この方法を構築方法と呼び、このクラスのオブジェクトを構築するために用いられ、Pythonは構築方法を呼び出してオブジェクトを生成する.開発者が構築方法を定義していない場合、Pythonはクラスにselfパラメータのみを含むデフォルトの構築方法を自動的に定義します.
2.オブジェクトの作成と使用(オブジェクトはインスタンスとも呼ばれます)
構文の形式:
     =   ()
#                  

オブジェクトのアクセス方法または変数の構文フォーマット:オブジェクト.変数|メソッド(パラメータ)
class Dog:
    def __init__(self, sex=" ", classification="  "):
        #  Dog           ,self          ,self.        
        self.sex = sex
        self.classification = classification

#                   ,                 
#        ,        ,            
#          ,            ,       
my_dog_1 = Dog()
print(my_dog_1.sex, my_dog_1.classification)
#     
my_dog_2 = Dog(" ", "   ")
print(my_dog_2.sex, my_dog_2.classification)
#      

1)インスタンス変数の追加または削除
インスタンス変数を追加:新しい変数に値を割り当てることができます.
インスタンス変数の削除:del文;
my_dog_2.name = "  "
print(my_dog_2.name)
#   
del my_dog_2.sex
print(my_dog_2.sex)
#     :AttributeError: 'Dog' object has no attribute 'sex'

2)インスタンスメソッドの追加
!!!オブジェクトを動的に追加する方法では、pythonは最初のパラメータselfを呼び出したオブジェクトに自動的に指さすことはありません.
#        
def feed_food(self, type):
    if type=="breakfast":
        print("1     ")
    elif type=="lunch":
        print("2     ")
    else:
        print("3     ")

#     feed_food   my_dog_2   food  
my_dog_2.food = feed_food
#     self      
my_dog_2.food(my_dog_2, "lunch")
# 2     

MethodTypeを使用すると、動的に増加するメソッドを、最初のパラメータを呼び出し元に自動的に割り当てるように設定できます.このメソッドを呼び出すときに、最初のパラメータを呼び出し元に指定する必要はありません.
from types import MethodType
my_dog_2.food = MethodType(feed_food, my_dog_2)
my_dog_2.food("lunch")
# 2     

Pythonオブジェクトの1つのメソッドが他のメソッドを呼び出す場合、selfを省略することはできません.
class Dog:
    def __init__(self, sex=" ", classification="  "):
        #  Dog           
        self.sex = sex
        self.classification = classification
        self.health = 1
    def is_dog_healthy(self):
        if self.health == 1:
            return True
        else:
            return False

    def feed_food(self, type):
        #          self    
        if self.is_dog_healthy()==False:
            print("          ")
        elif type == "breakfast":
            print("1     ")
        elif type == "lunch" :
            print("2     ")
        else:
            print("3     ")