前回の投稿の続きです。
ここからは、私が考えたcodeを元にクラスを説明していきます。
クラス文の基本
まずはクラスの基本。基本文型からコンストラクタ、デストラクタ、インスタンス変数、クラス変数、メソッドについて触れます。
基本
コードの基本は、下記のような形。「class クラス名():」と関数と似た形で定義します。ここで、クラス名の後のカッコ()はなくても、その後の処理は実行されます(継承する時には必要になります)。また、クラス名の一文字目は大文字が通例だそうですが、小文字でも実行は可能です。指示内容については、これから説明するクラス変数やコンストラクタ、デストラクタ、メソッドなどが入ります。そして、クラスを実行するときには、まずは一旦インスタンスを作ります。前回の投稿で説明したような具体的なオブジェクトと言われるやつです。
class クラス名(任意の引数(空欄可),): #①クラスの定義 指示内容 変数 = クラス名(必要な場合は引数等) #②インスタンスの生成
下がコード例です。単にHelloを返すクラスです。
#(例1)クラス文の基本と実行
class Test(): #①クラス文の定義
print("Hello")
instance = Test() #②インスタンスの生成
instance
戻り値
Hello
コンストラクタとインスタンス変数
次は、コンストラクタとインスタンス変数です。コンストラクタは、メソッドの1種です。インスタンス変数は、このコンストラクタ内で使われる変数です。オブジェク指向の説明で、オブジェクトは性質と振る舞いを持つと書きましたが、コンストラクタはインスタンスができた時に自動で生成されるので、インスタンス(つまりはオブジェクト)の性質を規定するものとも言えます。__init__
と第1引数のselfは、コンストラクタの生成にはマストです。引数は設定してもなくても、どちらでも良いです。コンストラクの値を指定するには、self.インスタンス変数名に値を入れる形になります。
def __init__(self, 引数1, 引数2,・・・): #①コンストラクタの生成 self.インスタンス変数名 = 値 変数 = クラス名 #②インスタンスの生成 → コンストラクタが呼び出される 変数.インスタンス名 #③インスタンス変数の値が呼び出される
下がコード例です。インスタンス変数のHelloを返します。
#(例2)コンストラクタ
class Test():#
def __init__(self): #①コンストラクタの生成
self.value = "Hello"
myinstance = Test() #②インスタンスの生成 → コンストラクタが呼び出される
myinstance.value #③インスタンス変数の値呼び出し
戻り値
Hello
クラス変数
次は、クラス変数です。クラス変数は、クラス内で直接、変数に値を入れるイメージです。インスタンスを作らなくとも直接アクセスできます。
class クラス名: クラス変数名 = 値 #①クラス変数の定義 クラス名.クラス変数名 #②クラス変数へのアクセス方法
下がコード例です。
#(例3)クラス変数
class Test:
val = 10 #①クラス変数の定義
Test.val #②クラス変数へのアクセス
戻り値
10
インスタンス変数との違いは、実行するときに一度インスタンスを作る必要があるかどうかです。この違いが何かに関わってくると思いますが、その点はよくわかりません。
デストラクタ
デストラクタは、インスタンスが不要となり削除されるためのメソッドです。参考サイトの中には、デストラクタの設定自体不要だと考えているものもあるようです。作り方としては、メソッド名を__del__
、第1引数をselfと置くだけです。
def __del__(self): 命令文
コード例です。
(例4)デストラクタ
class Test:
def __init__(self, message):
self.value = message
def __del__(self): #①デストラクタの生成
pass
myinstance = Test("Hello")
del myinstance #②デストラクタで削除
myinstance.value #③インスタンス変数の呼び出し
上記コードはデストラクタで削除されたインスタンスにアクセスしようとしているので、エラーが立ちます。
NameError: name 'myinstance' is not defined
メソッド
メソッドは、文字列型や整数型でも出てくるアレです。つまり関数です。コンストラクタやデストラクタなんかもメソッドで、メソッドは関数で、ということでメソッドはクラスの中に関数を定義するだけみたいなものです。defでメソッドを定義します。注意点としては、第1引数にselfを置く必要がある点です。ここが、関数の作成などと異なるところです。
def メソッド名(self, 引数): 命令文
コード例は以下です。
#(例5-1)メソッド(基本)
class Test:
def __init__(self, message):
self.value = message
def add_word(self, message2): #①メソッドの生成
return self.value + message2
myinstance = Test("Hello")
myinstance.add_word("World") #②メソッドの実行
戻り値
HelloWorld
クラス内でメソッドを利用し合う場合の呼び出し方は、「self.クラス名()」です。
#(例5-2)メソッド(クラス内でのメソッドの利用)
class Test:
def __init__(self, message):
self.value = message
def add_word(self, message2):#
return self.value + message2
def minus_word(self, message3):
return self.add_word(message3) + ",Peace!" #クラス内のメソッドを継承
myinstance = Test("Hello")
myinstance.minus_word("World")
戻り値
HelloWorld,Peace!
次回の投稿に続きます。