2023.08.22 オブジェクトの型
code:python
def myfunc():
pass
print('# 実験1')
print(type(myfunc))
結果
code:text
# 実験1
<class 'function'>
インスタンスメソッド、スタティックメソッド、クラスメソッドの型を確認する
code:python
class Myclass:
def method1(self):
print('pass')
@staticmethod
def method2(self):
print('pass')
@classmethod
def method3(cls):
print('pass')
まずはインスタンス化せずに確認する
code:python
print('# 実験2')
print(type(Myclass))
print(type(Myclass.method1))
print(type(Myclass.method2))
print(type(Myclass.method3))
結果:
code:text
# 実験1
<class 'type'>
<class 'function'>
<class 'function'>
<class 'method'>
インスタンス化すると、
code:python
print('# 実験3')
m1 = Myclass()
print(type(m1))
print(type(m1.method1))
print(type(m1.method2))
print(type(m1.method3))
こうなる:
code:text
# 実験3
<class '__main__.Myclass'>
<class 'method'>
<class 'function'>
<class 'method'>
つまり、
インスタンスメソッド:function から method になる
スタティックメソッド:function のまま
クラスメソッド:method のまま
ちなみに、抽象クラスの抽象関数は
code:python
from abc import ABCMeta, abstractmethod
class Myabsclass(metaclass=ABCMeta):
def method1(self): # 中身は空のメソッド
pass
@abstractmethod
def method2(self): # 中身は空のメソッド
pass
print('# 実験4')
print(type(Myabsclass))
print(type(Myabsclass.method1))
print(type(Myabsclass.method2))
結果は
code:python
# 実験4
<class 'abc.ABCMeta'>
<class 'function'>
<class 'function'>
いずれも function であった。