Pythonのクラスとオブジェクトを10分で理解してみませんか?

まず第一に、Pythonはオブジェクト指向プログラミング言語であり、オブジェクト指向プログラミング言語には、カプセル化、継承、およびポリモーフィズムという3つの主要な特性があります。したがって、Pythonを学ぶための鍵は、これらのポイントを習得することです。

1.パッケージ

カプセル化は理解しやすいです。簡単に言えば、データをリストにカプセル化することを意味します。これがデータのカプセル化です。
コードの一部を関数にカプセル化することは、コードのカプセル化です。
次に、プロパティとメソッドをカプセル化してオブジェクトを取得します。

まず、クラスを定義できます。このクラスには属性とメソッドがあります。

class XiaoMing:
    #属性
    height = 180
    weight = 65
    sex = '男'
    #方法
    def run(self):
        print('小明在跑步')
    def sleep(self):
        print('小明在睡觉')

クラスが定義された後、クラスオブジェクトが作成されます。これは、クラス定義によって作成された名前空間のラッパーです。

クラスオブジェクトは、属性参照とインスタンス化の2つの操作をサポートしていることに注意してください。

属性参照の構文は、一般的な標準構文obj.nameです。たとえば、XiaoMing.heightとXiaoMing.runは属性参照であり、前者はデータの一部を返し、後者はメソッドオブジェクトを返します。

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

In[2]:print(XiaoMing.run)
Out[2]:<function XiaoMing.run at 0x0000021C6239D0D0>

ここでは、クラスの重み属性に新しい値を割り当てるなど、クラス属性の割り当て操作もサポートしています。

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__メソッドをクラスで定義して、パラメーターの受信と受け渡しを支援することができます。
クラスが__init__メソッドを定義している場合、次のように、クラスオブジェクトのインスタンス化中に、新しく作成されたインスタンス化されたオブジェクトに対して__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))

パラメータxとyが__init __()で渡され、次にパラメータxとyをprint_coorで受け取る必要があることがわかります。このクラスオブジェクトをインスタンス化して、パラメータが__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]
'''

たとえば、この例では、list_はリストとして定義されていませんが、appendメソッドを呼び出すことができます。
実際、クラスMylistはlistの基本クラスを継承し、list_はMylistのインスタンス化されたオブジェクトであるため、list_には親クラスlistが所有するメソッドもあります。

もちろん、カスタムクラスの形式で2つのクラス間の継承関係を実装することもできます。ParentとChildの2つのクラスを定義します。Childにはプロパティとメソッドはありませんが、親クラスのParentから継承されます。

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()
'''
子类方法
'''

親クラスParentと同じ名前の子クラスChildにもう1つのメソッドがあることがわかります。子クラスがインスタンス化されてこのメソッドが呼び出されると、子クラスのメソッドが最終的に呼び出されます。Pythonでの継承では、多重継承も可能です。つまり、サブクラスは複数の親クラスの属性とメソッドを継承できますが、このタイプの操作はコードの混乱を引き起こすため、通常、このメソッドはお勧めしません。

ポリモーフィズム

ポリモーフィズムは、2つのクラスを定義するなど、比較的単純です。これら2つのクラスには関係がありませんが、2つのクラスに同じ名前のメソッドがあり、2つのクラスのインスタンスオブジェクトがそれぞれこのメソッドを呼び出すと、異なるインスタンスオブジェクトがクラスは呼び出されますメソッドも異なります。

class XiaoMing:
    def introduce(self):
        print("我是小明")
class XiaoHong:
    def introduce(self):
        print("我是小红")

上記の2つのクラスには導入メソッドがあります.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,classinfo)
クラスが別のクラスのサブクラスであるかどうかを判別します。サブクラスの場合はTrueを返し、そうでない場合はFalseを返します。

class Parent:
    pass
class Child(Parent):
    pass
print(issubclass(Child,Parent))
'''
True
'''

注:
①2番目のパラメーターは、クラスに渡すだけでなく、クラスで構成されるタプルにも渡すことができます。
②クラスはそれ自体のサブクラスであると判断されます。つまり、これら2つのパラメーターが同じクラスに渡されると、Trueも返されます。

print(issubclass(Parent,Parent))
'''
True
'''

2.isinstance(object,classinfo)
オブジェクトがクラスのインスタンスオブジェクトであるかどうかを判断します。そうである場合はTrueを返し、そうでない場合はFalseを返します。

class Parent:
    pass
class Child:
    pass
p = Parent()
c = Child()
print(isinstance(p,Parent,Child))
#True
print(isinstance(c,Parent))
#False

注:
①2番目のパラメーターは、クラスに渡すだけでなく、クラスで構成されるタプルにも渡すことができます。
②最初のパラメータがオブジェクトでない場合、常にFalseを返します。

3.hasattr(object,name)
インスタンスオブジェクトに属性が含まれているかどうかを確認します含まれている場合はTrueを返し、含まれていない場合はFalseを返します。

class Parent:
    height = 100
p = Parent()
print(hasattr(p,'height'))
'''
True
'''

ここで、2番目のパラメーター名は文字列として渡す必要があることに注意してください。渡さない場合はFalseが返されます。

このようなこれらのクラスとオブジェクトの関連知識を理解すると、関数とメソッドの使用法をよりよく理解できます。したがって、Pythonのクラスとオブジェクトの学習を理解するために読むのに10分かかります。

それでも私は自分で作ったPython学習交換グループ:645415122をお勧めしたいと思います。全員がPythonを学んでいます。Pythonを学びたい、または学んでいるなら、ぜひ参加してください。誰もがソフトウェア開発パーティーであり、共有しています。時々。最新のPythonの高度な資料のコピーや、2021年に私が編集したゼロベースの教育を含む乾物(Pythonソフトウェア開発にのみ関連)。Pythonに興味のある上級者や友人の参加へようこそ!

**次のコンテンツは役に立たないため、このブログは検索エンジンによってクロールされて使用されました
(*  ̄︶ ̄)(*  ̄︶ ̄)(*  ̄︶ ̄)(*  ̄︶ ̄)(*  ̄︶ ̄)(*  ̄ ︶ ̄)(*  ̄︶ ̄)(*  ̄︶ ̄)
pythonですか?pythonを学ぶのにどれくらい時間がかかりますか?なぜそれはクローラー
pythonと呼ばれますか?クローラールーキーチュートリアルpythonクローラーユニバーサルコードpythonクローラーお金を稼ぐ方法
python基本チュートリアルウェブクローラーpythonpythonクローラー古典的な例
python爬虫類
(¯)¯*)(*¯)¯)(¯)¯*)(*¯)¯)(¯)¯*)(*¯)¯)(¯)¯ )(¯)¯)
上記コンテンツは役に立たない、このブログはクロールされ、検索エンジンによって使用されました

おすすめ

転載: blog.csdn.net/pyjishu/article/details/115120811