PythonDay 09---モジュール、オブジェクト向けプログラミング
5327 ワード
Pythonのモジュール
一、モジュール
1.モジュールの概要
説明:Pythonで、一つ.pyファイルはモジュール(Module)と呼ばれます.メリット:(1)コードのメンテナンス性が向上しました.(2)コードの作成はゼロから始める必要はありません.他のモジュールの注意を参照してください.自分でモジュールを作成するときは名前に注意し、Pythonが持っているモジュール名と衝突してはいけません.たとえば、システムには
二、オブジェクト向けプログラミング
1.クラスとインスタンス
eg:
説明:パラメータ
2.アクセス権
pythonの変数とメソッドへのアクセス権は、公有、保護、プライベートの3つです.公有:
説明:クラスのグローバル変数がプライベート属性として定義されていない場合、外部でクラスの内部属性egを変更できます.
クラスの属性をプライベート属性として定義したい場合は、変数を導入する際に、変数の前に2つの下線
クラスのプライベート属性を取得または変更する場合は、Javaのように
もっと言えば、Pythonは文法的にプライベート属性やメソッドのプライバシーを厳格に保証していません.プライベート属性やメソッドに名前を変えてアクセスを「妨げる」だけです.実際には、名前を変えるルールがまだアクセスできることを知っていれば、次のコードはそれを検証することができます.
3.継承とマルチステート
継承構文:新しく定義されたクラスのパラメータは、そのクラスが継承するクラス(1)pythonの継承とJavaの継承がほぼ同じであり、親クラスのすべてのメソッドを継承することができます.異なるクラスは同じ親を継承し、親メソッドを書き換えます.これにより、継承によってマルチステートが生成されます.(2)pythonとJavaの継承の相違点:Animalクラスに
4.インスタンスクラス属性とクラス属性
(1)インスタンス属性説明:Pythonは動的言語であるため、インスタンス変数、またはself変数でインスタンスの属性を追加することができる.(2)クラス属性説明:クラスが持つ属性.Javaのようにクラスで定義された属性.eg:
注意:プログラムを作成するときは、同じ名前のインスタンス属性がクラス属性をブロックするため、インスタンス属性とクラス属性に同じ名前を使用しないでください.ただし、インスタンス属性を削除した後、同じ名前を使用すると、クラス属性にアクセスします.
5.selfについて簡単に説明する
selfはJavaのthisに相当し、クラスのインスタンス化オブジェクトを表します.
以上のコードから分かるように、
一、モジュール
1.モジュールの概要
説明:Pythonで、一つ.pyファイルはモジュール(Module)と呼ばれます.メリット:(1)コードのメンテナンス性が向上しました.(2)コードの作成はゼロから始める必要はありません.他のモジュールの注意を参照してください.自分でモジュールを作成するときは名前に注意し、Pythonが持っているモジュール名と衝突してはいけません.たとえば、システムには
sys
モジュールが付属しており、独自のモジュールはsys.py
と命名できません.そうしないと、システムに付属するsys
モジュールをインポートできません.また、Python変数のネーミング仕様に従うには、中国語、特殊文字分類を使用しないでください:(1)モジュールを持参する(2)サードパーティモジュールを持参する(3)モジュールをカスタマイズする二、オブジェクト向けプログラミング
1.クラスとインスタンス
eg:
class Student(object):
def __init__(self, name, age):
self.name = name
self.age = age
def informationOfStu(self):
print('{} {} !'.format(self.name, self.age))
return
s = Student('wanhao', 18)
s.informationOfStu()
# :
wanhao 18 !
説明:パラメータ
object
は継承を示すインタフェースがobject
であり、関数__init__()
はJavaのコンストラクション関数に相当し、クラスの各メソッド(コンストラクション関数を含む)の最初のパラメータはself
でなければならない.注意:特殊なメソッド「init」の前後にそれぞれ2つの下線がある!!変数がクラスのインスタンスであるかどうかを判断するにはどうすればいいですか?isinstance()
関数で判断:eg:class Student(object):
def __init__(self, name, age):
self.__name = name
self.__age = age
def informationOfStu(self):
print('{} {} !'.format(self.name, self.age))
return
s = Student('wanhao', 18)
print(isinstance(s, Student))
# :
True
2.アクセス権
pythonの変数とメソッドへのアクセス権は、公有、保護、プライベートの3つです.公有:
保護されている:_
私有:__ __
実際に共有されているのと保護されているのは形式的に少し異なるだけで、公有は正常な命名で、保護されているのは_
で、つまり変数命の前に_
を加えて、他の面では完全に同じです(内部メカニズムを含む).この方法は文法上のルールではなく、単一の下線の先頭の属性と方法は外部からアクセスできるので、プログラマーに注意して操作するように指示する暗示や隠喩が多い.説明:クラスのグローバル変数がプライベート属性として定義されていない場合、外部でクラスの内部属性egを変更できます.
class Student(object):
def __init__(self, name, age):
self.name = name
self.age = age
def informationOfStu(self):
print('{} {} !'.format(self.name, self.age))
return
s = Student('wanhao', 18)
print(s.name)
s.name = 'li'
print(s.name)
# :
wanhao
li
クラスの属性をプライベート属性として定義したい場合は、変数を導入する際に、変数の前に2つの下線
__
を付けてプライベート(他の位置の変数もそうである)を表す注意:Pythonでは、変数名が__xxx__
に似ている、つまり2つの下線で始まり、2つの下線で終わる特殊変数であり、特殊変数は直接アクセス可能であり、private
変数ではないので、__name__
、__age__
のような変数名は使用できません.eg: class Student(object):
def __init__(self, name, age):
self.__name = name
self.__age = age
def informationOfStu(self):
print('{} {} !'.format(self.name, self.age))
return
s = Student('wanhao', 18)
print(s.__name)
# :
AttributeError: 'Student' object has no attribute '__name'
クラスのプライベート属性を取得または変更する場合は、Javaのように
get()
、set()
関数を記述できます.もっと言えば、Pythonは文法的にプライベート属性やメソッドのプライバシーを厳格に保証していません.プライベート属性やメソッドに名前を変えてアクセスを「妨げる」だけです.実際には、名前を変えるルールがまだアクセスできることを知っていれば、次のコードはそれを検証することができます.
class Student:
def __init__(self, name):
self.__name = name
def run(self):
print('{} is running!'.format(self.__name))
if __name__ == '__main__':
s = Student('ZhangSan')
print(s._Student__name)
s.run()
# :
ZhangSan
ZhangSan is running!
__name
を_Student__name
に変更しただけで3.継承とマルチステート
継承構文:新しく定義されたクラスのパラメータは、そのクラスが継承するクラス(1)pythonの継承とJavaの継承がほぼ同じであり、親クラスのすべてのメソッドを継承することができます.異なるクラスは同じ親を継承し、親メソッドを書き換えます.これにより、継承によってマルチステートが生成されます.(2)pythonとJavaの継承の相違点:Animalクラスに
run()
メソッドがあると仮定する)静的言語(例えばJava)にとって、Animal
タイプを入力する必要がある場合は、Animal
タイプまたはそのサブクラスでなければ、run()
メソッドを呼び出すことはできません.Pythonのような動的言語では、必ずしもAnimal
タイプに入力する必要はありません.伝達されたオブジェクトにrun()
の方法があることを保証するだけでよい.(つまり書き換えられる方法が必要)4.インスタンスクラス属性とクラス属性
(1)インスタンス属性説明:Pythonは動的言語であるため、インスタンス変数、またはself変数でインスタンスの属性を追加することができる.(2)クラス属性説明:クラスが持つ属性.Javaのようにクラスで定義された属性.eg:
class Student(object):
age = 18 #
def __init__(self, name, age):
self.name = name #self name , , ,
s = Student('wanhao', 18)
print(s.name)
print(s.age)
s.scoer = 100 #scoer
print(s.scoer)
print(Student.name)
# :
wanhao
18
100
AttributeError: type object 'Student' has no attribute 'name' # name
注意:プログラムを作成するときは、同じ名前のインスタンス属性がクラス属性をブロックするため、インスタンス属性とクラス属性に同じ名前を使用しないでください.ただし、インスタンス属性を削除した後、同じ名前を使用すると、クラス属性にアクセスします.
5.selfについて簡単に説明する
selfはJavaのthisに相当し、クラスのインスタンス化オブジェクトを表します.
class Animal(object):
def run(self):
print(self)
print("I am running!")
t = Animal()
t.run()
Animal.run(t)
# :
<__main__.animal object="" at="">
I am running!
<__main__.animal object="" at="">
I am running!
以上のコードから分かるように、
t.run()
とAnimal.run(t)
は完全に等価な2つの方法であり、実際には、実行中にt.run()
をAnimal.run(t)
文に変換して実行され、Animal.run(t)
がパラメータを伝達する必要があることがわかり、伝達されたこのパラメータがインスタンス化対象である.したがって、各クラスのメソッドについて、最初のパラメータはselfである.