数字が欲しいのに、<class '・・・'>みたいなのが、結果として返ってくることが多くて、これはどうやら「オブジェクト指向」を理解しないとこの食い違いは、解消できないぞ、と常々思ってきた。
ある時、オブジェクト指向の糸口がつかめた気がしたので、これまで実装してきたものを頼りに理解を深める。
コードを実況中継
人間編
class Person: # こんな人間考えた
def __init__(self): # こんな人間
self.name = "鈴木" # 名前は鈴木という人間
suzuki = Person() #考えた人間を実体化させてみた
suzuki.name #人間に名前を聞いてみた
ロボット編
class Robot(object): #こんなロボット考えた
def say_something(self): #なんか言うことができるロボット
print('Hello') #ハローと言うことができるロボット
robot = Robot() #考えたロボットを実体化させてみた
robot.say_something() #ロボットに言わせてみた
()があるのとないの
人間編
class Person: # こんな人間考えた
def __init__(self): # こんな人間
self.name = "鈴木" # 名前は鈴木という人間
suzuki = Person #考えた人間を実体化させてみた
print(suzuki)
print(type(suzuki))
print('#################')
class Person: # こんな人間考えた
def __init__(self): # こんな人間
self.name = "鈴木" # 名前は鈴木という人間
suzuki = Person() #考えた人間を実体化させてみた
print(suzuki)
print(type(suzuki))
得られた結果
()なし
<class '__main__.Person'>
<class 'type'>
#################
()あり
<__main__.Person object at 0x00000179CBDA90D0>
<class '__main__.Person'>
得られた結果を言い換えると
()なし
<class '__main__.Person'>→設計段階の人間だよ
<class 'type'>→クラス型だよ
()あり
<__main__.Person object at 0x00000179CBDA90D0>→メインのファイルで作られた人間っていう名前のオブジェクトだよ
<class '__main__.Person'>→メインファイルの人間っていうクラスだよ
属性とメソッド
l = []
print(type(l))
print(l.append('a'))
print(type(l.append))
<class 'list'>
None
<class 'builtin_function_or_method'>
print(print)
print(type(print))
<built-in function print>
<class 'builtin_function_or_method'>
わかったこと
- クラスは設計段階のモノ、インスタンスは実体になったモノ、オブジェクトはそれら全てを指す「モノ」
- ()をつけるかつけないかは、クラスを呼び出すのか、インスタンスを呼び出すのかの違い
- どのオブジェクトも、属性とメソッドを持っている
- 属性は「どんな奴か」、メソッドは「そいつがどんな動きができるか」
- データ型は、属性の一つ
- 関数とメソッドは別物。関数は入力したら出力する箱、メソッドは「そいつがどんな動きができるか」