Pythonのクラスとオブジェクトを簡単に述べます。


最後のページでPythonの種類と対象を話します。Pythonという言語はどこにでもあります。もしPythonを浅い経験があれば、Pythonは対象に向けてプログラミングされた言語だと聞いたことがあります。だから、対象に向けてプログラミングされた言語は三つの特徴があります。パッケージ、継承、多状態です。
私たちが普段接している多くの関数、方法の操作はこれらの性質を持っています。私たちは使うだけですが、まだその本質を深く理解していません。以下はクラスと対象に関する知識を紹介します。
パッケージ
パッケージという概念はよく知られていないはずです。たとえば、いくつかのデータをリストに入れます。これはデータパッケージに属します。いくつかのコード文を関数として使いやすいように包装してもいいです。これはコードのパッケージです。データとコードを一緒に入れてもいいです。用語で表すと、属性と方法をパッケージ化してオブジェクトを得ることができます。
まず、クラスを定義してもいいです。このクラスには属性と方法がありますが、ある仲間は好奇心があります。属性と方法は対象になるのではないですか?なぜまた種類になったのですか?例を挙げると、クラスはいわば一枚の毛玉の部屋であり、対象は毛玉の部屋を基礎にして改造されたハードカバーのようなものである。

class XiaoMing:
  #  
  height = 180
  weight = 65
  sex = ' '
  #  
  def run(self):
    print('     ')
  def sleep(self):
    print('     ')
クラスの定義が完了すると、クラスの定義によって作成された名前空間をパッケージ化したクラスオブジェクトが作成されます。クラスオブジェクトは2つの操作をサポートします。属性参照と実装です。
属性引用の文法は一般的な標準文法です。例えば、XiaoMing.heightとXiaoMing.runは属性参照であり、前者はデータを返し、後者は方法オブジェクトを返します。

In[1]:print(XiaoMing.height)
Out[1]:180

In[2]:print(XiaoMing.run)
Out[2]:<function XiaoMing.run at 0x0000021C6239D0D0>
クラスの属性についても、クラスのweight属性に新たな値を付与するなど、クラスの属性の値付け操作をサポートします。

In[3]:print(XiaoMing.weight)
Out[3]:65

In[4]:XiaoMing.weight = 100
In[5]:print(XiaoMing.weight)
Out[5]:100
クラスの実装は、クラスのオブジェクトを参照なし関数として指定することができます。

In[6]:ming = XiaoMing()
mingとは、クラスのオブジェクトが実装されて作成された例示的なオブジェクトであり、インスタンスオブジェクトを介してクラスの属性や方法を呼び出すこともできます。

In[7]:ming.run()
Out[7]:     

In[8]:print(xiaoming.height)
Out[8]:180
#                                 
In[11]:XiaoMing.run(ming)
Out[11]:     
魔法の方法init_
クラスは、実際の例では、上の例のように単純ではなく、一般的なクラスは、インスタンスオブジェクトを初期状態として作成する傾向がありますので、クラスでは、一つのレベルを定義することができます。init_の魔法の方法で、この方法はパラメータの受信、着信を助けることができます。
一つのクラスが定義されれば、__u uinit_この方法は、クラスのオブジェクトの実装中に自動的に新たに作成されたインスタンスオブジェクトに対して呼び出すことができます。init_方法は、次の例を見てください。

class Coordinates:
  def __init__(self,x,y):
    self.x = x
    self.y = y
  def print_coor(self):
    print('     (%s,%s)'%(self.x,self.y))
__u u u uにいるのが見えますinit_()にパラメータxとyが入ってきました。coorではパラメータxとyを受け取りたいですが、次にこの類のオブジェクトを実例化して、パラメータが__u uを通過できるかどうかを検証します。init_()クラスに渡すための例示的な操作です。

In[9]:coor = Coordinates(5,3)
In[10]:coor.print_coor()

Out[10]:     (5,3)
引き継ぐ
継承とは、新しいクラスが別のクラスに基づいて構築されたもので、この新しいクラスは、サブクラスまたは派生クラスと呼ばれ、もう一つのクラスは親クラス、ベースクラスまたはスーパークラスと呼ばれ、サブクラスは親クラスに既存の属性や方法を継承します。

class Mylist(list):
  pass
list_ = Mylist()
list_.append(1)
print(list_)
''' [1] '''
例えば上記のような例では、私はリストを持っていません。リストとして定義されていますが、appedメソッドを呼び出すことができます。なぜならば、クラスMylistはリストという基質を継承していますが、list_またMylistの実用化対象となりますので、list_父類リストの持つ方法もあります。
もちろん、カスタムクラスを通じて、2つのクラスの間の継承関係を実現することができます。私たちは、PartentとChildの2つのクラスを定義します。Childには属性と方法がなく、父クラスのPartentだけを継承します。

class Parent:
  def par(self):
    print('    ')
class Child(Parent):
  pass
child = Child()
child.par()
'''
    
'''
上書き
サブクラスでは、親と同名の方法や属性が定義されていますが、親に対応する方法や属性を自動的にカバーしますか?それとも、上記の例で実現しますか?分かりやすいです。

class Parent:
  def par(self):
    print('    ')
class Child(Parent):
  def par(self):
    print('    ')
child = Child()
child.par()
'''
    
'''
サブタイプのChildの中に親クラスのPartと同じ名前の方法がもう一つ増えています。例を示して、この方法を呼び出した場合、最後に呼び出したのはサブクラスの方法です。
Pythonでは継承も複数の相続も許されています。つまり、一つのサブクラスは複数の父親類の属性と方法を継承することができますが、このような操作はコードの混乱を招くので、ほとんどの場合は使用を勧めません。ここでは多くの紹介をしました。
多形
多形の比較は簡単で、例えば、2つのクラスを定義する場合、これらの2つのクラスは何の関係もなく、2つのクラスの中に同名の方法があるだけで、2つのクラスのインスタンスオブジェクトがそれぞれこの方法を呼び出す場合、異なるクラスのインスタンスオブジェクトが呼び出す方法も異なる。

class XiaoMing:
  def introduce(self):
    print("    ")
class XiaoHong:
  def introduce(self):
    print("    ")
上記の2つのクラスの中にはintroduce方法があります。2つのタイプを実際的に例証して、この方法を使って多状態を実現します。

In[12]:ming = XiaoMing()
In[13]:hong = XiaoHong()

In[14]:ming.introduce()
Out[14]:    

In[15]:hong.introduce()
Out[15]:    
常用BIF
1、issubclass(class、classiinfo)
クラスが別のクラスのサブクラスかどうかを判断し、Trueに戻ると、逆にFalseに戻ります。

class Parent:
  pass
class Child(Parent):
  pass
print(issubclass(Child,Parent))
'''
True
'''
注意すべき点は二つです。
  • 1.第二のパラメータは、クラスだけでなく、クラスからなるタプルにも入ることができる。
  • 2.一つのクラスは自分のサブクラスと判定されます。つまり、この二つのパラメータが同じクラスに入ったときもTrueに戻ります。
  • 
    print(issubclass(Parent,Parent))
    '''
    True
    '''
    2、isinstance(object、classiinfo)
    オブジェクトがクラスのインスタンスオブジェクトであるかどうかを判断し、Trueに戻ると、逆にFalseに戻ります。
    
    class Parent:
      pass
    class Child:
      pass
    p = Parent()
    c = Child()
    print(isinstance(p,Parent,Child))
    #True
    print(isinstance(c,Parent))
    #False
    注意すべき点は二つです。
  • 1.第二のパラメータは、クラスだけでなく、クラスからなるタプルにも入ることができる。
  • 2.最初のパラメータがオブジェクトでない場合、常にFalseに戻る。
  • 3、hasattr(object、name)
    インスタンスオブジェクトに属性が含まれているかどうかを判断し、そうであればTrueに戻り、逆にFalseに戻ります。
    
    class Parent:
      height = 100
    p = Parent()
    print(hasattr(p,'height'))
    '''
    True
    '''
    第二のパラメータnameは文字列形式で着信しなければならないので、そうでなければFalseに戻ります。
    以上はPythonの種類と対象の詳細を簡単に述べました。Pythonの種類と対象に関する資料は他の関連記事に注目してください。