python 3入門とか
オブジェクト向け言語では、クラスが最も重要な一環であり、pythonは自然にクラスというメカニズムを持っている.pythonのクラスメカニズムは、C++、javaとの違いは大きくなく、クラスの多くの重要な特性が踏襲され、同じように多態、抽象、パッケージ化することができます.
python 3の役割ドメイン:
クラスを紹介する前に、まずpythonの役割ドメインに関するルールを紹介します.
1.ネーミングスペース:
は、名前からオブジェクトへのマッピングです.現在のネーミングスペースは主にPython辞書によって実現されているが、通常は具体的な実現方法には関心がない(性能を考慮しない限り).
以下に、ネーミングスペースの例を示します.
組み込みネーミング(abs()のような関数、および組み込み例外名)セット、モジュール内のグローバルネーミング、関数呼び出しのローカルネーミング.ある意味ではオブジェクトのプロパティセットもネーミングスペースです.
ネーミングスペースについて理解する必要がある重要なことは、異なるネーミングスペースのネーミングには何の関係もありません.たとえば、2つの異なるモジュールがmaximizeという関数を定義し、混同しないことです.ユーザーはモジュール名を接頭辞として参照する必要があります.例えば、mathにsin関数があり、mathを通過することができる.sin呼び出し;
2.作用域:
Pythonプログラムがネーミングスペースの本文領域に直接アクセスできる.ここでの直接アクセスは、名前の誤った参照がネーミングスペース内で検索されることを意味します.
例:
クラス定義構文
クラス定義の形式:
クラス定義は、関数定義のように実行されてから有効になります.statement文は関数定義に慣れていますが、他の文でもいいです.
クラス定義セクションに入ると、ローカル役割ドメインとして新しいネーミングスペースが作成されるため、すべての付与値がこの新しいネーミングスペースのローカル変数になります.特に、関数定義はここで新しい名前をバインドします.
クラス定義が完了すると、クラスオブジェクトが作成されます.つまりクラス名です.
クラスイメージ:
クラスオブジェクトは、プロパティの適用とインスタンス化の2つの操作をサポートします.
属性適用使用:クラス名.属性;たとえば、クラス定義は次のとおりです.
では私は何があったの?funは有効な属性参照である.整数とメソッドオブジェクトをそれぞれ返します.
クラス定義のインスタンス化:クラスのインスタンスでは関数記号を使用します:クラス名();
例:x=Myclass()
以上、新しいクラスのインスタンスを作成し、変数xにオブジェクトを割り当てました.これは初期化されていません.
多くのクラスは、オブジェクトを初期状態に作成する傾向があります.したがって、クラスはinit()という特殊なメソッドを定義する可能性があります.次のようにします.
クラスがinit()メソッドを定義すると、クラスのインスタンス化操作によって新しく作成されたクラスインスタンスにinit()メソッドが自動的に呼び出されます.次の例では、新しいインスタンスを作成できます.
x = MyClass()
もちろん,init()法は弾性の必要性からパラメータを持つことができる.実際,パラメータはinit()を介してクラスのインスタンス化操作に渡される.
インスタンスオブジェクト:
インスタンスオブジェクトは、クラスを操作するための属性参照です.データとメソッドの2つの参照があります.
データ:javaのメンバーと似ていますが、実は変数です.ローカル変数と同様に、データ属性は宣言する必要はなく、初めて使用すると生成されます.
例:
メソッド:メソッドはクラスに属する関数で、メソッドはx.fun()を参照します.
メソッド参照を変数に割り当てることもできます.これは関数の割り当てと同じです.
xf=x.fun()#注意selfパラメータは、オブジェクトインスタンス化が最初のパラメータとして変数に渡され、呼び出しを表示する必要はありません.
インスタンス属性とクラス属性
1インスタンスのプロパティの説明:
インスタンスにプロパティをバインドする方法は、インスタンス変数またはself変数を使用します.
nameとscoreはインスタンス属性です.
2クラスのプロパティ:
クラス属性であり、すべてを分類するclassで直接属性を定義できます.
nameはクラス属性であり、クラスのすべてのインスタンスにアクセスでき、同じオブジェクトを指します.
継承:
継承がなければクラスはありませんが、pythonクラスの定義は次のとおりです.
例:dogとcatにとってAnimalはその親である. サブクラスで呼び出しを要求する属性が見つからない場合は、ベースクラスを検索します.ベースクラスが他のクラスから派生した場合、このルールは再帰的に適用されます.DogメソッドもCatメソッドもrunメソッドを呼び出すことができます. 追加方法: 多態(カバー): 派生クラスは、そのベースクラスを上書きする方法です.メソッドが同じオブジェクト内の他のメソッドを呼び出すときに特権がないため、ベースクラスのメソッドが同じベースクラスのメソッドを呼び出すと、実際に派生クラスの上書き者が呼び出される可能性があります.
法.
マルチステートのメリット:
変数については、Animalタイプであることを知るだけで、サブタイプを正確に知る必要がなく、run()メソッドを安心して呼び出すことができます.具体的に呼び出されたrun()メソッドは、Animal、Dog、Cat、Tortoiseオブジェクトに作用し、実行時のオブジェクトの正確なタイプによって決定されます.これは、マルチステートの真の威力です.呼び出し側は詳細にかかわらず呼び出されます.一方,Animalのサブクラスを追加する場合,run()メソッドが正しく記述されていることを確認すれば,元のコードがどのように呼び出されているかにかかわらずよい.これが有名な「開閉」の原則です.
拡張オープン:Animalサブクラスの追加を許可します.
修正に対して閉じる:Animalタイプに依存するrun_を修正する必要はありませんtwice()などの関数.
5.派生クラスのインスタンス化は普通のクラスとあまり変わらない.
Pythonには、継承のための2つの関数があります.
多重継承:
pythonは多重継承をサポートします.
プライベート変数:
データまたはメソッドの前に__を付けるだけです.2つの下線でいいです.たとえば_spam.python独自のネーミングコードは_spam代替_classname__spam
このように外で正常に従うことができません:クラス名._spamが呼び出されました.しかし、すべてを書くとクラス名に代わる.classname__spamはまだいいですが、pythonの欠陥は
外部コードでは、インスタンス変数に外部からアクセスできません.nameとインスタンス変数._scoreだ
例外もクラスです.
異常の派生クラスを自分で定義し、rasieで投げ出すことができます.
放出には2つの方法があります.
1.raise Classname()定義の派生クラス;
2.raiseインスタンス;異常類の実例から来た.
以下のように説明します.
異常句の順序が逆になると(execpt Bが一番前にある)、B,B,B–最初に一致する異常がトリガーされます.
関連リンク:
python 3入門のようなpython 3入門の関数python 3入門のサイクルpython 3のif文python 3入門の付与文python 3入門のprint,import,input紹介python 3入門のset python 3入門の辞書python 3入門の文字列python 3入門のリストとメタグループpython 3入門のソフトウェアインストールpython 3爬虫類の入門と正規表現
python 3の役割ドメイン:
クラスを紹介する前に、まずpythonの役割ドメインに関するルールを紹介します.
1.ネーミングスペース:
は、名前からオブジェクトへのマッピングです.現在のネーミングスペースは主にPython辞書によって実現されているが、通常は具体的な実現方法には関心がない(性能を考慮しない限り).
以下に、ネーミングスペースの例を示します.
組み込みネーミング(abs()のような関数、および組み込み例外名)セット、モジュール内のグローバルネーミング、関数呼び出しのローカルネーミング.ある意味ではオブジェクトのプロパティセットもネーミングスペースです.
ネーミングスペースについて理解する必要がある重要なことは、異なるネーミングスペースのネーミングには何の関係もありません.たとえば、2つの異なるモジュールがmaximizeという関数を定義し、混同しないことです.ユーザーはモジュール名を接頭辞として参照する必要があります.例えば、mathにsin関数があり、mathを通過することができる.sin呼び出し;
2.作用域:
Pythonプログラムがネーミングスペースの本文領域に直接アクセスできる.ここでの直接アクセスは、名前の誤った参照がネーミングスペース内で検索されることを意味します.
例:
def scope_test(): def do_local(): spam = "local spam"# def do_nonlocal(): nonlocal spam spam = "nonlocal spam"# , 。 def do_global(): global spam spam = "global spam"# spam = "test spam"# , ; do_local() print("After local assignment:", spam) do_nonlocal() print("After nonlocal assignment:", spam) do_global() print("After global assignment:", spam) scope_test() print("In global scope:", spam)# ## : After local assignment: test spam After nonlocal assignment: nonlocal spam After global assignment: nonlocal spam In global scope: global spam
クラス定義構文
クラス定義の形式:
class className(superClass):
<statement 1>
.....
<statement N>
クラス定義は、関数定義のように実行されてから有効になります.statement文は関数定義に慣れていますが、他の文でもいいです.
クラス定義セクションに入ると、ローカル役割ドメインとして新しいネーミングスペースが作成されるため、すべての付与値がこの新しいネーミングスペースのローカル変数になります.特に、関数定義はここで新しい名前をバインドします.
クラス定義が完了すると、クラスオブジェクトが作成されます.つまりクラス名です.
クラスイメージ:
クラスオブジェクトは、プロパティの適用とインスタンス化の2つの操作をサポートします.
属性適用使用:クラス名.属性;たとえば、クラス定義は次のとおりです.
class Myclass:
" "
num=123
def fun(self):
return 'hello world'
では私は何があったの?funは有効な属性参照である.整数とメソッドオブジェクトをそれぞれ返します.
クラス定義のインスタンス化:クラスのインスタンスでは関数記号を使用します:クラス名();
例:x=Myclass()
以上、新しいクラスのインスタンスを作成し、変数xにオブジェクトを割り当てました.これは初期化されていません.
多くのクラスは、オブジェクトを初期状態に作成する傾向があります.したがって、クラスはinit()という特殊なメソッドを定義する可能性があります.次のようにします.
def __init__(self):
self.data = []
クラスがinit()メソッドを定義すると、クラスのインスタンス化操作によって新しく作成されたクラスインスタンスにinit()メソッドが自動的に呼び出されます.次の例では、新しいインスタンスを作成できます.
x = MyClass()
もちろん,init()法は弾性の必要性からパラメータを持つことができる.実際,パラメータはinit()を介してクラスのインスタンス化操作に渡される.
インスタンスオブジェクト:
インスタンスオブジェクトは、クラスを操作するための属性参照です.データとメソッドの2つの参照があります.
データ:javaのメンバーと似ていますが、実は変数です.ローカル変数と同様に、データ属性は宣言する必要はなく、初めて使用すると生成されます.
例:
x=Myclass()
#Myclass , ;
x.counter=1
メソッド:メソッドはクラスに属する関数で、メソッドはx.fun()を参照します.
メソッド参照を変数に割り当てることもできます.これは関数の割り当てと同じです.
xf=x.fun()#注意selfパラメータは、オブジェクトインスタンス化が最初のパラメータとして変数に渡され、呼び出しを表示する必要はありません.
インスタンス属性とクラス属性
1インスタンスのプロパティの説明:
インスタンスにプロパティをバインドする方法は、インスタンス変数またはself変数を使用します.
class Student(object):
def __init__(self, name):
self.name = name
s = Student('peace')
s.score =40
nameとscoreはインスタンス属性です.
2クラスのプロパティ:
クラス属性であり、すべてを分類するclassで直接属性を定義できます.
class student:
name="peace"
nameはクラス属性であり、クラスのすべてのインスタンスにアクセスでき、同じオブジェクトを指します.
継承:
継承がなければクラスはありませんが、pythonクラスの定義は次のとおりです.
class className(superClass): <statement 1> ..... <statement N> ## className superclass 。
例:
class Animal(object):
def run(self):
print('Animal is running...')
class Dog(Animal):
pass
class Cat(Animal):
pass
class Dog(Animal):
def see(self):
print('see a dog')
法.
class Dog(Animal):
def run(self):
print('Dog is running...')
class Cat(Animal):
def run(self):
print('Cat is running...')
マルチステートのメリット:
def run_twice(animal):
animal.run()
animal.run()
## :
>>> run_twice(Animal())
Animal is running...
Animal is running...
>>> run_twice(Dog())
Dog is running...
Dog is running...
変数については、Animalタイプであることを知るだけで、サブタイプを正確に知る必要がなく、run()メソッドを安心して呼び出すことができます.具体的に呼び出されたrun()メソッドは、Animal、Dog、Cat、Tortoiseオブジェクトに作用し、実行時のオブジェクトの正確なタイプによって決定されます.これは、マルチステートの真の威力です.呼び出し側は詳細にかかわらず呼び出されます.一方,Animalのサブクラスを追加する場合,run()メソッドが正しく記述されていることを確認すれば,元のコードがどのように呼び出されているかにかかわらずよい.これが有名な「開閉」の原則です.
拡張オープン:Animalサブクラスの追加を許可します.
修正に対して閉じる:Animalタイプに依存するrun_を修正する必要はありませんtwice()などの関数.
5.派生クラスのインスタンス化は普通のクラスとあまり変わらない.
Pythonには、継承のための2つの関数があります.
• isinstance() : isinstance(obj, int) obj.__class__ int int
• issubclass() : issubclass(bool, int) True, bool int 。 , issubclass(unicode, str) False unicode str ( basestring)。
多重継承:
pythonは多重継承をサポートします.
class className(superClass1,superClass1,superClass2.....): <statement 1> ..... <statement N> ## className superClass1,superClass1,superClass2..... 。
プライベート変数:
データまたはメソッドの前に__を付けるだけです.2つの下線でいいです.たとえば_spam.python独自のネーミングコードは_spam代替_classname__spam
このように外で正常に従うことができません:クラス名._spamが呼び出されました.しかし、すべてを書くとクラス名に代わる.classname__spamはまだいいですが、pythonの欠陥は
class Student(object):
def __init__(self, name, score):
self.__name = name
self.__score = score
def print_score(self):
print('%s: %s' % (self.__name, self.__score))
外部コードでは、インスタンス変数に外部からアクセスできません.nameとインスタンス変数._scoreだ
例外もクラスです.
異常の派生クラスを自分で定義し、rasieで投げ出すことができます.
放出には2つの方法があります.
1.raise Classname()定義の派生クラス;
2.raiseインスタンス;異常類の実例から来た.
以下のように説明します.
class B(Exception): pass class C(B): pass class D(C): pass for cls in [B, C, D]: try: raise cls() except D: print("D") except C: print("C") except B: print("B")
異常句の順序が逆になると(execpt Bが一番前にある)、B,B,B–最初に一致する異常がトリガーされます.
関連リンク:
python 3入門のようなpython 3入門の関数python 3入門のサイクルpython 3のif文python 3入門の付与文python 3入門のprint,import,input紹介python 3入門のset python 3入門の辞書python 3入門の文字列python 3入門のリストとメタグループpython 3入門のソフトウェアインストールpython 3爬虫類の入門と正規表現