Python入門7
****************************************
クラス
****************************************
インスタンス化せずにクラスを使う例
class Cls:
data1 = 'クラスの中のデータ1'
def fnc():
print('Hello')
print('data1の値は、 ' + Cls.data1)
Cls.fnc()
data1の値は、 クラスの中のデータ1
Hello
インスタンス化してクラスを使う例
クラス内の関数の引数に「self」が必要になる
class Cls:
data1 = 'クラスの中のデータ1'
#インスタンスメソッドはselfが必要
def fnc(self):
print('Hello')
#インスタンス化
cls1 = Cls()
cls2 = Cls()
cls2.data1 = "クラス2のデータ"
print('cls1.data1の値は、 ' + cls1.data1)
print('cls2.data1の値は、 ' + cls2.data1)
cls1.data1の値は、 クラスの中のデータ1
cls2.data1の値は、 クラス2のデータ
class Cls:
#コンストラクタ __init__
def __init__(self, data1):
self.dat = data1
def func(self):
print('hello')
cls1 = Cls('abcd')
cls2 = Cls('efgh')
print('cls1の値: ' + cls1.dat)
cls1.func()
print('cls2の値: ' + cls2.dat)
cls2.func()
cls1の値: abcd
hello
cls2の値: efgh
hello
class cls:
def __init__(self, data1, data2):
self.dat1 = data1
self.dat2 = data2
x = cls("abc", "def")
print(x.dat1, x.dat2)
abc def
上記のプログラムをコンソールで実行してタプルを作る様子を見てみましょう。
>>>class cls:
... def __init__(self, data1, data2):
... self.dat1 = data1
... self.dat2 = data2
...
>>>x = cls("abc", "def")
>>>x.dat1, x.dat2
('abc', 'def')
class Cls:
def __init__(self, data1):
self.dat1 = data1
def func(self):
return self.dat1
x = Cls("abc")
print(x.func())
abc
****************************************
クラスの継承
****************************************
class BaseCls:
#コンストラクタ __init__b
def __init__(self, data1):
self.name = data1
def basFunc(self):
print('Base')
#サブクラス スーパークラスはHuman
class DerivCls(BaseCls):
def __init__(self, data2):
super().__init__(data2)
def derFunc(self):
print('Derived')
dcls = DerivCls('abcd')
print('データは ' + dcls.name)
dcls.basFunc()
dcls.derFunc()
データは abcd
Base
Derived
多重継承もOK
class Cls1:
def func1(self):
print("No.1")
class Cls2:
def func2(self):
print("No.2")
class Cls3(Cls1, Cls2):
#メンバーが無いときpass
pass
x = Cls3()
x.func1()
x.func2()
No.1
No.2
****************************************
モジュール
****************************************
コードをファイルに記述し、他のスクリプトからインポートして利用するファイルを「モジュール」と呼びます。
スクリプトファイルもモジュールも拡張子は「.py」です。
モジュールはimport文で取り込んで使います。
もらしなりいのインポート
モジュールファイル名を「module01.py」とすると
import module01
または
from module01 import *
モジュール内の関数を指定する場合
from module01 import mod_func01, mod_func02
モジュールは呼び出された時点で実行してしまいます。それを禁止する場合は、
if __name__ == "__main__":
ans = 3 + 4
print('{0}'.format(ans))
7
__name__自身のモジュール名がはいっていくるので、スクリプトファイルとして呼び出されたときの__main__の時に実行する。
モジュールとして呼び出す場合は、__name__ 以降は実行されない。
ワイルドカードでインポートした場合、アンダースコアで始まる関数はインポートしない。