基本的なクラスのサンプルコード (Python)
[履歴] [最終更新] (2020/07/11 22:07:30)

サンプルプログラム

sample.py

#!/usr/bin/python

class MainClass:
    x = 128
    def setX(self, x):
        self.x = x
    def getX(self):
        return self.x

class SubClass(MainClass):
    def __init__(self):
        self.x = 64
    def display(self):
        print self.x


obj = MainClass()
print obj.getX()
obj.setX(256)
print obj.getX()


obj = SubClass()
print obj.getX()
obj.setX(1024)
obj.display()

実行例

$ python sample.py 
128
256
64
1024

with-as における処理を記述

enterexit を実装することで with-as で利用できるクラスを実装できます。with 内で例外が発生した場合であっても __exit__ は実行されます。その場合、引数で例外の内容を取得できます。Java の try-with-resources や C# の using のようなものです。

main.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

class MyClass(object):
    def __enter__(self):
        return self
    def __exit__(self, exc_type, exc_value, traceback):
        print "%r\n" % exc_type
        print "%r\n" % exc_value
        print "%r\n" % traceback

def Main():
    with MyClass() as obj:
        raise Exception("xxxx")

if __name__ == '__main__':
    Main()

実行例

$ python main.py
<type 'exceptions.Exception'>

Exception('xxxx',)

<traceback object at 0x7fb9631a88c0>

Traceback (most recent call last):
  File "main.py", line 17, in <module>
    Main()
  File "main.py", line 14, in Main
    raise Exception("xxxx")
Exception: xxxx

その他

#!/usr/bin/python
# -*- coding: utf-8 -*-

# オブジェクトの属性値を取得
class MyClass(object):
    x = 123
    y = -123
obj = MyClass()
getattr(obj, 'x') # 123

# 静的メソッド化
class MyClass2(object):
    @staticmethod
    def f():
        return 123
MyClass2.f() # 123

# デストラクタ
class MyClass3(object):
    def __del__(self):
        print 'destructed'
def f():
    obj = MyClass3()
f() # destructed

プロパティとしてメソッドを実行

@property を用いると、プロパティのようにメソッドにアクセスできます。

#!/usr/bin/python
# -*- coding: utf-8 -*-

def Main():
    obj = MyClass()
    print(obj.myprop)  #=> hi

class MyClass(object):

    @property
    def myprop(self):
        return 'hi'

if __name__ == '__main__':
    Main()
関連ページ