ホーム > カテゴリ > Python・人工知能・Django >

クラス/アトリビュート/スロット/カプセル化/プロパティ/継承 [Python]

Python/TensorFlowの使い方(目次)

目次

1. クラスとアトリビュート
2. スロット
3. コンストラクタとメソッド
4. カプセル化(アクセス制限)
5. プロパティ
6. 継承
7. 演算子のオーバーロード

※サンプルコードの「---」以下は出力結果です。

1. クラスとアトリビュート

# クラス定義
class MyClass:
    pass

# クラスの生成
obj= MyClass()
# アトリビュートの追加
obj.value = 12345  
# アトリビュートからデータを取得する
obj.value
---
12345

クラスにメソッドや処理がない場合には「pass」を定義します。アトリビュートはPython版のクラスメンバのようなものです。自由に追加できて読み書き可能です。

2. スロット

スロット機能を使用すると追加できるアトリビュートを制限できます。

class MyClass:
    # aとbのアトリビュートのみを許可する
    __slots__ = ['a','b']   

obj= MyClass()
obj.a = 1
obj.b = 2
obj.c = 3 # ここでエラーになる
---
AttributeError

3. コンストラクタとメソッド

class MyClass:
    # コンストラクタ(メソッド)
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c      
        
    # メソッド
    def calc(self):
        return self.a + self.b + self.c

obj= MyClass(10,20,30)
obj.calc()
---
60

コンストラクタ、メソッド

第一引数は必ず「self」にする必要があります。この「self」は自動的にインストタンスが代入されます。selfはクラスのメソッドやアトリビュートにアクセス可能です。

4. カプセル化(アクセス制限)

Pythonでカプセル化するにはアトリビュート/メソッド名の先頭に「_」または「__」を付加するだけです。アンダーバー1個はクラス内部用であると宣言。アンダーバー2個はより厳しく制限するという違いがあります。

5. プロパティ

class MyClass:
    def __init__(self):
        # アトリビュート
        self._x = 0
    
    # ゲッターの定義
    def getX(self):
        return self._x

    # セッターの定義
    def setX(self, value):
        self._x = value
    
    # プロパティの定義
    x = property(getX, setX)

obj= MyClass()
obj.x = 10
obj.x
---
10

6. 継承

class Parent:
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c      
        self.d = 777
        
    def output(self):
        return self.d

# 継承    
class Child(Parent):
    def __init__(self, a, b, c):
        
        # 親クラスのコンストラクタを呼び出す
        super().__init__(a,b,c)
        
        print("Childのコンストラクタ")
    
    def xxx(self):
        print (888)    

obj= Child(1,2,3)
obj.output()
---
Childのコンストラクタ
777

今回は1つの継承ですが、Pythonでは多重継承が可能です。また、継承によるメソッドのオーバーライドは完全に上書きされます。必要であればsuper()で親クラスのメソッドを実行する必要があります。

上記の例では16行目で親クラスのコンストラクタを呼び出さないと、24行目でエラー(dのアトリビュートが存在しない)となります。

7. 演算子のオーバーロード

class MyClass:
    def __init__(self, value):
        self.value = value
        
    # 特殊メソッド
    def __add__(self, obj):
        return self.value + int(obj)


obj= MyClass(10)
obj + 1
---
11





関連記事



公開日:2018年07月02日 最終更新日:2021年02月25日
記事NO:02688


この記事を書いた人

💻 ITスキル・経験
サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。

画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ
プチモンテ代表、アーティスト名:プチモンテ
🎵 音楽制作
BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は叙情詩、叙情的な楽曲が多い。楽曲制作は2023年12月中旬 ~

オリジナル曲を始めました✨

YouTubeで各楽曲を公開しています🌈
https://www.youtube.com/@petitmonte

【男性ボーカル】DA・KA・RA | 新たな明日が風と共に訪れる

【男性、女性ボーカル】時空を超越する先に | 時空と風の交響曲

【女性、男性ボーカル】絆 | 穏やかな心に奏でる旋律