まず、カテゴリの最初の理解
クラスは、同じプロパティとメソッドを持つオブジェクトのコレクションです。
まず、次の例を見てみましょう。
>>> class Foo:
... def __init__(self, name, age):
... self.name = name
... self.age = age
... self.__money = 100
... def get_name(self):
... return self.name
... def get_money(self):
... return self.__money
...
>>> f = Foo("joker",18)
>>> print(f.get_name)
<bound method Foo.get_name of <__main__.Foo object at 0x000001F4B8339438>>
>>> print(f.get_name())
joker
>>> print(f.get_money())
100
>>> print(f.name)
joker
>>> print(f.age)
18
>>> print(f.__money)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Foo' object has no attribute '__money'
>>>
上記の例を組み合わせて、いくつかの名前の説明を行います。
(1)クラス:上記のクラス(キーワード)に対応する類似したもののグループ、Fooはクラス名
(2)、オブジェクト:コレクション内の物、クラス別生成、上記のf
(3)に対応、属性:オブジェクトの特定の機能、上記の名前、年齢、お金
(4)に対応、メソッド:オブジェクトの特定の動的機能、上記のgetname()に対応、getmoney()
上記から、クラスがクラスFooを定義していることがわかります。その下に3つのメソッドがあります。その中で、init()は、オブジェクトの生成時に自動的に実行される構築メソッドであり、getnameとgetmoneyは、オブジェクトによって呼び出される通常のメソッドです。
Fooクラスには3つの属性値(名前、年齢、お金)があり、その中で名前と年齢は通常の属性値であり、__ moneyはプライベート属性値です。通常の属性値は、特定の値を取得するためにオブジェクトによって呼び出されます。 、プライベート属性値はクラスでのみ呼び出すことができますが、オブジェクトを呼び出すことはできません。プライベート属性値のコンテンツを取得する必要がある場合は、上記のようなメソッドを定義して、オブジェクト呼び出しメソッドを介してプライベート属性を取得できます。 。
二、クラスの分野
クラスのフィールドには、静的フィールドと通常のフィールドが含まれます。その中で、静的フィールドはクラスに格納され、オブジェクトとクラスを介してアクセスできますが、通常のフィールドはオブジェクトに格納され、オブジェクトを介してのみアクセスできます。
次の例:
>>> class Foo:
... NAME = "中国"
... def __init__(self, city):
... self.city = city
...
>>> f = Foo("上海")
>>> print(f.NAME)
中国
>>> print(Foo.NAME)
中国
>>> print(f.city)
上海
>>> print(Foo.city)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'Foo' has no attribute 'city'
>>>
上記の例では、NAMEは静的フィールドであり、cityは通常のフィールドです。静的フィールドNAMEは、オブジェクトfおよびクラスFoo(上記のとおり)を介して呼び出すことができますが、通常のフィールドはオブジェクトfを介してのみ呼び出すことができます。
三、クラスのメソッド
クラスメソッドは
、(1)、通常のメソッド
(2)、静的メソッド
(3)に分けられ
、クラスメソッドのアプリケーションシナリオは次のとおりです:
(1)オブジェクトにいくつかの値を保存する必要がある場合は、メソッドはオブジェクトの値を呼び出す必要があり、通常のメソッドを使用します。
(2)オブジェクトの値が不要な場合は静的メソッドを使用します。
(3)メソッドで現在のクラス名が必要な場合は、クラスメソッドを使用します。 ;
>>> class Foo:
... def bar(self):
... print("bar")
... @staticmethod
... def static_method():
... print("static method")
... @staticmethod
... def static_method2(a,b):
... print(a,b)
... @classmethod
... def class_method(cls):
... print("class method",cls)
...
>>> f = Foo()
>>> f.bar()
bar
>>> Foo.bar(f)
bar
>>> f.static_method()
static method
>>> Foo.static_method()
static method
>>> Foo.static_method(1,2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: static_method() takes 0 positional arguments but 2 were given
>>> Foo.static_method2(1,2)
1 2
>>> Foo.class_method()
class method <class '__main__.Foo'>
>>>
クラスFooは上記で定義されており、通常のメソッドbar()、静的メソッドstaticmethod()、staticmethod2()、およびクラスメソッドclass_method()があります。ここで、@ staticmethodはメソッドが静的メソッドであることを示し、@ classmethodはメソッドを示します。クラスメソッドです。これらはすべてオブジェクトとクラス名で呼び出すことができます。その中で、クラス名を使用して共通メソッドを呼び出す場合は、オブジェクト名を渡し、パラメーターを渡さずに静的メソッドを呼び出し、パラメーターを渡さずにクラスメソッドを呼び出す必要があります。 。