ホームページ > バックエンド開発 > Python チュートリアル > コンストラクターの使い方の紹介

コンストラクターの使い方の紹介

PHP中文网
リリース: 2017-06-21 16:36:14
オリジナル
2418 人が閲覧しました

カテゴリーとは、物事を説明する定義、抽象的な概念です。
インスタンスとは、この種の物の特定の個体、特定の物を指します。

例:
「人」はクラスです。 「Zhang San」は人間の具体例です

プログラミングするときも同様です。必要な場合は、まず自分で「クラス」を定義して、具体的な例を作成します。

クラスの定義を利用してインスタンスを作成することをクラスのインスタンス化といいます。
インスタンス化プロセスは、クラスのコンストラクターを呼び出して、インスタンスのデータ割り当てを完了します。

以下は、洗濯機の例を示します。

これは、Washer クラスをインスタンス化する単純な手動洗濯機です。

 1 #class Washer: 2 class Washer:#定义一个Washer类 3  4     def __init__(self): #这是定义类的构造函数,也是一个特殊的实例方法 5         self.water=0   #实例的属性(变量) 6         self.scour=0 7  8     def add_water(self,water):#实例的方法(函数),可以接受实例化后传过来的参数给类内实例变量,又因为实例继承了类的属性和方法,所以 9     #相当于传递给了类的实例化对象的实例变量10         print('Add water:',water)11         self.water=water#在类的方法内引用实例变量用 self.属性名12 13     def add_scour(self,scour):14         self.scour=scour15         print('Add scour:',scour)16 17     def start_wash(self):18         print('Start wash...')19         20 if __name__=='__main__':21     w=Washer()#类的实例化22     w.add_water(10)#传递参数到实例变量23     w.add_scour(2)24     w.start_wash()
ログイン後にコピー
実行結果:

クラス内でインスタンスメソッドを定義するとき(4行目など)は手動でselfパラメータを追加する必要がありますが、呼び出し時には手動でselfパラメータを追加する必要はありません4 行目に示すように、クラスがインスタンス化された後、このメソッドは Python によって自動的に追加されます。

インスタンス化メソッドは w=Washer() です。クラスの後に括弧を追加する必要があることがわかります。

クラス内で定義されたインスタンスメソッドは、インスタンス名.メソッド名()を使用してクラスの外から呼び出すことができます。例えば

w.add_scour(2),必要的时候加上参数。
ログイン後にコピー


半自動洗濯機を作るようにプログラムを変更してみましょう。クラス、メソッドが相互に呼び出します。

washa.py:

 1 class Washer: 2  3     def __init__(self): 4         self.water=0 5         self.scour=0 6  7     def set_water(self,water): 8         self.water=water 9         self.add_water()10 11     def set_scour(self,scour):12         self.scour=scour13         self.add_scour()#在类内调用函数,用 self.方法名14 15     def add_water(self):16         print('Add water:',self.water)17 18     def add_scour(self):19         print('Add scour:',self.scour)20 21     def start_wash(self):22         print('Start wash...')23         24 if __name__=='__main__':25     w=Washer()26     w.set_water(10)27     w.set_scour(2)28     w.start_wash()29
ログイン後にコピー
は次のように変更することもできます:

 1 class Washer: 2  3     def __init__(self): 4         self.water=0 5         self.scour=0 6  7     def set_water(self,water): 8         self.water=water        
 9 10     def set_scour(self,scour):11         self.scour=scour        
12 13     def add_water(self):14         print('Add water:',self.water)15 16     def add_scour(self):17         print('Add scour:',self.scour)18 19     def start_wash(self):20         self.add_water()21         self.add_scour()22         print('Start wash...')23         24 if __name__=='__main__':25     w=Washer()26     w.set_water(10)27     w.set_scour(2)28     w.start_wash()
ログイン後にコピー
実行結果:


次の変更を行うと、ユーザーは水と洗剤の量を設定せずに衣類を洗濯できます。洗濯機:

 1 class Washer: 2  3     def __init__(self): 4         self.water=10#将实例属性修改为默认的标准洗衣程序需要的量 5         self.scour=2 6  7     def set_water(self,water): 8         self.water=water        
 9 10     def set_scour(self,scour):11         self.scour=scour        
12 13     def add_water(self):14         print('Add water:',self.water)15 16     def add_scour(self):17         print('Add scour:',self.scour)18 19     def start_wash(self):20         self.add_water()21         self.add_scour()22         print('Start wash...')23         24 if __name__=='__main__':25     w=Washer()26 ##    w.set_water(10) #这两行代码注释掉,代表用户不必设置水和洗涤剂量27 ##    w.set_scour(2)28     w.start_wash()29
ログイン後にコピー
しかし、この場合、水10Lと洗剤2Lしか入れられず、これは良くないので改善する必要があります。コンストラクターを使用します。


 1 class Washer: 2  3     def __init__(self,water=10,scour=2): 4         self.water=water 5         self.scour=scour 6  7     def set_water(self,water): 8         self.water=water        
 9 10     def set_scour(self,scour):11         self.scour=scour        
12 13     def add_water(self):14         print('Add water:',self.water)15 16     def add_scour(self):17         print('Add scour:',self.scour)18 19     def start_wash(self):20         self.add_water()21         self.add_scour()22         print('Start wash...')23         24 if __name__=='__main__':25     w=Washer()26     w.start_wash()27 28     wb=Washer(100,10)29     wb.start_wash()30 31     wc=Washer(100,10)32     wc.set_water(50)33     wc.set_scour(5)34     wc.start_wash()35 36     37 38     39
ログイン後にコピー

動作結果:

コンストラクターはインスタンス化する際にクラスのインスタンスオブジェクトをよりリッチにすることができ、異なる種類のインスタンスをインスタンス化する機能を持っています。

以上がコンストラクターの使い方の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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