Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
246
Help us understand the problem. What is going on with this article?
@0xfffffff7

Pythonのクラスメンバのスコープまとめ

More than 1 year has passed since last update.

Advent CalendarのPythonが過疎気味なので、昨日に引き続き何か簡単なネタを書こうと思います。

以前にまとめたPythonのクラスメンバのスコープまとめ紹介します。

具体的には、パブリックなメンバとメソッド、プライベートなメンバとメソッドの記述方法とアクセス方法です。

# coding: utf-8

class Widget(object):

    # コンストラクタ
    def __init__(self, r, l):

        # 通常メンバ変数
        self.rval = r
        self.lval = l

        # プライベート変数
        self.__secret = 5

    # publicクラスメンバ変数
    classVal = 30

    # プライベートクラス変数
    # 外からは特別な記述でないとアクセスできない
    __SecretClassVal = 10

    # 通常メソッド
    def Calc(self):
        # ここでもメンバ変数を定義できる。
        self.top = 10
        return self.rval * self.lval * self.top

    # プライベートメソッド
    def __MyCalc(self):
        print "This is Private Method!"

    # クラスメソッド.
    @classmethod
    def SelfName(cls):
        # ここでもクラスメンバ変数の定義ができる。
        cls.number = 1

    # プライベートクラスメソッド.
    @classmethod
    def __PrivateSelfName(cls):
        print "This is Private Class Method!"

if __name__ == '__main__':

    # コンストラクタと通常メソッドの呼び出し。
    w = Widget(2, 4)

    # メンバ変数へのアクセス
    w.lval = 3
    w.rval = 4

    # プライベートメンバ変数にアクセス。
    # インスタンス._クラス名__変数名でアクセスできる。(推奨されない)
    print w._Widget__secret

    # パプリッククラス変数へアクセス。
    # インスタンス名でもクラス名でもどちらでもアクセス可能。
    print Widget.classVal
    print w.classVal

    # プライベートクラス変数にアクセス。
    # インスタンス._クラス名__変数名でアクセスできる。(推奨されない)
    print w._Widget__SecretClassVal

    # 通常のメソッドの呼び出し.
    print w.Calc()

    # プライベートメソッドの呼び出し(推奨されない)
    print w._Widget__MyCalc()

    # クラスメソッドの呼び出し.
    Widget.SelfName()

    # プライベートクラスメソッドの呼び出し(推奨されない)
    print w._Widget__PrivateSelfName()
出力
 5
 30
 30
 10
 120
 This is Private Method!
 None
 This is Private Class Method!
 None
246
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
246
Help us understand the problem. What is going on with this article?