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__ 以降は実行されない。

 

ワイルドカードでインポートした場合、アンダースコアで始まる関数はインポートしない。