ホームページ > バックエンド開発 > Python チュートリアル > Python クラスの基本的な入門知識

Python クラスの基本的な入門知識

WBOY
リリース: 2016-06-16 08:47:29
オリジナル
1011 人が閲覧しました
コードをコピー コードは次のとおりです:

class Account(object):
"A simple class"
account_type =" Basic"
def __init__(self,name,balance):
"新しいアカウント インスタンスを初期化する"
self.name=name
self.balance=balance
defposit(self) 、amt):
"入金"
self.balance=self.balance+amt
defdraw(self,amt):
"出金"
self.balance=self.balance- amt
def inventory(self):
"現在の残高を返す"
return self.balance

このうち、__init__関数はPythonのコンストラクタです。また、変数balanceはクラスインスタンスの変数です。
さらに、Python のクラスでメンバー関数を定義する場合、最初のパラメーターは常に self であり、それ自体のインスタンスを表します。これは C++ の this ポインターに似ていますが、C++ の this ポインターは暗黙的です。グローバルに表示されますが、Python ではパラメータとして渡す必要があります。これは Python でのクラス定義のもう 1 つの特徴です。
クラスのメンバー関数では、次のようにクラス名を先頭に指定する必要があります。
Copy code コードは次のとおりです:

class Foo(object):
def bar(self):
print "bar!"
def spam (self):
bar(self) # エラー、NameError が発生します。次の可能性があります: self.bar
Foo.bar(self) # 有効な

2. 静的メソッドクラス内で呼び出す場合には使用されません 静的メソッドの使用
クラス内で静的メソッドを使用するには、クラスのメンバー関数の前に @staticmethod タグを追加して、次のメンバー関数が静的関数であることを示す必要があります。静的メソッドを使用する利点は、このメソッドを使用するためにインスタンスを定義する必要がないことです。さらに、次のように、複数のインスタンスがこの静的メソッドを共有します:
Copy code コードは次のとおりです:

class SimClass():
@staticmethod
def ShareStr():
print "これは静的メソッドです"
SimClass.ShareStr() #Static 関数を使用する

3. クラスメソッド:
クラスメソッドは通常のメンバー関数や静的関数とは異なるようです。このセマンティクスは、その定義によって異なります。
クラス メソッドは、クラスを使用して呼び出すか、そのインスタンスを使用して呼び出すことができるメソッドです。このメソッドを呼び出すか、このメソッドを呼び出すクラス インスタンス、メソッドの最初の文字 引数は常に、メソッドが定義されているクラス オブジェクトです。
メソッドの最初のパラメータはインスタンス オブジェクトではなくクラス オブジェクトであることに注意してください。
慣例により、クラス メソッドの最初のパラメータには cls という名前が付けられます。いつでもクラス メソッドを定義する必要はありません。 (クラス メソッドが実現できるすべての機能は、関数がクラス オブジェクトをパラメータとして受け入れる限り、通常の関数を定義することで実現できます。
クラス メソッドを定義し、クラス メソッドを使用します:
コードをコピーします コードは次のとおりです:

class ABase(object):
@classmethod #クラス メソッド修飾子
def aclassmet(cls): print 'a class method for', cls.__name__
class ADeriv(ABase): pass
bInstance = ABase( )
dInstance = ADeriv( )
ABase.aclassmet( ) # 印刷: ABase のクラス メソッド
bInstance.aclassmet( ) # 印刷: ABase のクラス メソッド
ADeriv.aclassmet( ) # 印刷: ADeriv のクラス メソッド
dInstance.aclassmet( ) # 印刷: ADeriv のクラス メソッド

つまり、クラス メソッドは必要なく、通常の関数を使用してクラス メソッドの機能を実装することもできます。
4. クラスの継承
Python では、次のようにクラスを継承します。
class A(object) #Inherit object class
#....
class B(A) #Inherit class A
#....
また、Python は多重継承をサポートしています。多重継承の場合は、対応する関数を見つけて、その Python のような対応するメソッドがあります。 :
コードをコピー コードは次のとおりです:

class D(oject): pass #D はオブジェクト class B(D): #B は D のサブクラスです
varB = 42
def method1(self):
print "Class B : method1"
class C(D) : #Cこれも D のサブクラスです。
varC = 37
def method1(self):
print "Class C : method1"
def method2(self):
print "Class C : method2"
class A(B,C): #A は B および C のサブクラスです
varA = 3.3
def method3(self):
print "Class A : method3"


A.method1() を呼び出すとどうなりますか?答えは ClassB:method1 です。この本では次のように紹介されているだけです:
基底クラスで定義された属性を検索する場合、Python は深さ優先の原則を使用して、サブクラス定義内の基底クラスの順序で検索します。 **注意** (新しいスタイルのクラスではこの動作が変更されました)。上記の例では、A.varB にアクセスすると、A-B-D-C-D の順に検索が実行され、同じ属性を定義する基本クラスが複数ある場合は、最初に見つかったもののみが検索されます。属性値が使用されます:
5. データ非表示
Python でデータ非表示を実装するのは非常に簡単で、クラス変数名の前にキーワードを追加する必要はありません。このようにして、クラスのインスタンスの場合、その変数名とメンバー関数は使用できなくなり、継承されたクラスに対しても非表示になります。名前付けの競合を引き起こすことなく、まったく同じ変数名またはメンバー関数名を使用できます。
コードをコピーします コードは次のとおりです:

class A:
def __init__(self):
self.__X = 3 # self._A__X
クラス B(A):
def __init__(self):
A.__init__(self)
self.__X = 37 # self._B__X
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート