Last Update 2025/10/18
概要
クラス定義
sample.py
print("クラス定義\n");
class C1:
x = "abc"
class C2:
def __init__(self, val):
self.v = val
def pr(self):
print(f"v = {self.v}")
c1 = C1
c2 = C2(1)
print(dir(c1))
print(c1.x)
print(dir(c2))
print(c2.v)
c2.pr()
実行結果
$ python3 sample.py
クラス定義
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'x']
abc
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'pr', 'v']
1
v = 1
継承
sample.py
def deldir(dr, deldr):
# 重複する属性名を削除
ret = []
for x in dr:
if x not in deldr:
ret.append(x)
return ret
class C1:
pass
class C2(object):
pass
class C3(int):
pass
class C4(str):
pass
class C5(C4):
pass
print("継承元クラスとの属性リストの比較\n")
print("C1 --- 継承元指定なし\n", deldir(dir(C1), dir(object)), "\n")
print("C2 --- 継承元 : 基底クラスobject\n", deldir(dir(C2), dir(object)), "\n")
print("C3 --- 継承元 : int\n", deldir(dir(C3), dir(int)), "\n")
print("C4 --- 継承元 : str\n", deldir(dir(C4), dir(str)), "\n")
print("C5 --- 継承元 : C4\n", deldir(dir(C5), dir(C4)), "\n")
実行結果
$ python3 sample.py
継承元クラスとの属性リストの比較
C1 --- 継承元指定なし
['__dict__', '__module__', '__weakref__']
C2 --- 継承元 : 基底クラスobject
['__dict__', '__module__', '__weakref__']
C3 --- 継承元 : int
['__dict__', '__module__']
C4 --- 継承元 : str
['__dict__', '__module__', '__weakref__']
C5 --- 継承元 : C4
[]
実行環境
Python 3.12.11
コード例・出力内容中の表記
・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。