ホームページ  >  記事  >  バックエンド開発  >  Python オブジェクト指向のクラスと例

Python オブジェクト指向のクラスと例

不言
不言オリジナル
2018-04-14 10:16:331773ブラウズ

この記事で共有する内容は Python のオブジェクト指向のクラスと例に関するもので、必要な方は参考にしてください。

クラスとインスタンス


オブジェクト指向の最も重要な概念。はクラス (Class) とインスタンス (Instance) です。クラスは Student クラスなどの抽象テンプレートであり、インスタンスはクラスに基づいて作成された特定の「オブジェクト」であることを覚えておく必要があります。各オブジェクトは同じメソッドを持ちます。 、ただし独自のデータは異なる場合があります。

引き続き Student クラスを例に挙げます。Python では、クラス キーワードを使用してクラスを定義します。

class Student(object):
   pass

class の後にクラス名が続きます。通常、クラス名は大文字で始まります。続いて ( object) が続き、クラスが継承されるクラスを示します。継承の概念については後で説明します。通常、適切な継承クラスがない場合、これがすべてのクラスで使用されます。継承する。

Student クラスを定義した後、Student クラスに基づいて Student のインスタンスを作成できます。インスタンスの作成は、クラス名 + () によって実行されます:

class Student(object):
   pass

bart = Student()
print(bart)
print(Student)
<__main__.Student object at 0x000001A9412A47B8>
<class &#39;__main__.Student&#39;>

変数 bart が Student のインスタンスを指していることがわかります。 、次の0x000001A9412A47B8はメモリアドレスであり、各オブジェクトのアドレスは異なり、Student自体がクラスです。

たとえば、name 属性をインスタンス bart にバインドできます。

class Student(object):
    def __init__(self,name,score):
        self.name = name
        self.score = score
    def print_score(self):
        print(&#39;%s:%s&#39;%(self.name,self.score))

bart = Student(&#39;Boyuan Zhou&#39;,100)
lisa = Student(&#39;Maomao&#39;,100)
bart.name= &#39;jeff&#39;
print(bart.name)
jeff

クラスはテンプレートの役割を果たすことができるため、インスタンスの作成時に属性を追加できます。拘束する必要があると思われる項目は必ずご記入ください。特別な __init__ メソッドを定義すると、インスタンスの作成時に名前、スコア、その他の属性が関連付けられます。

class Student(object):
    def __init__(self,name,score):
        self.name = name
        self.score = score

__init__ メソッドの最初のパラメーターは常に self であり、作成されたインスタンス自体を表すことに注意してください。 self は作成されたインスタンス自体を指すため、__init__ メソッド内でさまざまなプロパティを self にバインドできます。

__init__ メソッドでは、インスタンスを作成するときに空のパラメーターを渡すことはできません。__init__ メソッドに一致するパラメーターを渡す必要がありますが、Python インタープリターは自動的にインスタンス変数を渡します。渡します:

class Student(object):
    def __init__(self,name,score):
        self.name = name
        self.score = score
    def print_score(self):
        print(&#39;%s:%s&#39;%(self.name,self.score))

bart = Student(&#39;Boyuan Zhou&#39;,100)
lisa = Student(&#39;Maomao&#39;,100)
bart.name= &#39;jeff&#39;
print(bart.name)
print(bart.score)
jeff
100

通常の関数と比較して、クラスで定義された関数の唯一の違いは、最初のパラメーターが常にインスタンス変数 self であり、呼び出し時にこのパラメーターを渡す必要がないことです。それ以外は、クラス メソッドは通常の関数と変わらないため、デフォルト パラメーター、変数パラメーター、キーワード パラメーター、および名前付きキーワード パラメーターを引き続き使用できます。

データのカプセル化

オブジェクト指向プログラミングの重要な機能は、データのカプセル化です。上記の Student クラスでは、各インスタンスに独自の名前とスコア データがあります。このデータには、生徒のスコアを印刷するなどの関数を通じてアクセスできます

>>> std1 = {&#39;name&#39;:&#39;jeff&#39;,&#39;score&#39;:100}
>>> std2 = {&#39;name&#39;:&#39;xin&#39;,&#39;score&#39;:0}
>>> def print_score(std):
...     print(&#39;%s:%s&#39;%(std[&#39;name&#39;],std[&#39;score&#39;]))
...
>>> print_score(std1)
jeff:100
>>> print_score(std2)
xin:0

ただし、Student インスタンス自体がこのデータを所有しているため、外部関数からこのデータにアクセスする必要はなく、Student クラスの Functions で直接アクセスできます。データにアクセスするためのメソッドが内部で定義され、「データ」がカプセル化されます。データをカプセル化するこれらの関数は、Student クラス自体に関連付けられています。これらをクラスのメソッドと呼びます。

class Student(object):
    def __init__(self,name,score):
        self.name = name
        self.score = score
    def print_score(self):
        print(&#39;%s:%s&#39;%(self.name,self.score))

メソッドを定義するには、最初のパラメーターが self であることを除き、その他は通常の関数と同じです。メソッドを呼び出すには、インスタンス変数で直接呼び出すだけで済みます。self を除いて、他のパラメータは通常どおりに渡されます。

bart.print_score()
jeff:100

このように、Student クラスを外側から見ると、インスタンスとスコアを作成するには名前を指定する必要があること、および出力方法はすべて Student クラスによって内部的に定義されているので、簡単に呼び出すことができることを知っておく必要があります。内部実装の詳細。

カプセル化のもう 1 つの利点は、get_grade:

class Student(object):
    def __init__(self,name,score):
        self.name = name
        self.score = score
    def print_score(self):
        print(&#39;%s:%s&#39;%(self.name,self.score))
    def get_grade(self):
        if self.score >=90:
            return 'A'
        elif self.score>=600:
            return  'B'
        else:
            return  'C'
bart = Student('Boyuan Zhou',100)
lisa = Student('Maomao',100)
bart.name= 'jeff'
bart.print_score()

print(bart.get_grade())
jeff:100
A
などの新しいメソッドを Student クラスに追加できることです。

以上がPython オブジェクト指向のクラスと例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:PHP戦略パターン次の記事:PHP戦略パターン