ビジネスパーソン・ガジェット置場 empty lot for business

営業や仕事、それに伴う生活を便利に楽にするツール、ガジェットを作ります。既にあるツールも自分用にカスタマイズ。

python: 関数をインスタンス変数として呼び出したい_@property

備忘録です。@propertyを使って関数をインスタンス変数として呼び出したい時の備忘録です。

ピンポイントですが、@propertyの使い方です。

 

関数の前にデコーダーで@propertyをつけておくと、インスタンス変数として呼び出しが可能になります。

 

例えば、こんな感じでPersonクラスを作ったとします。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        
    @property
    def generation(self):
        return round(self.age, -1)

 

クラス内に作った関数generationは年齢を四捨五入してくれます。

その関数の前に@propertyを付けるとこんな感じで呼び出せます。

関数の後に()が入りません。

 

# インスタンス生成
teacher = Person('Mike', 22)

# インスタンスの変数として呼び出し
print(f'先生は{teacher.generation}代です')

>>>先生は20代です

 

 

@propertyがないと

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        
    def generation(self):
        return round(self.age, -1)

 

同じように呼び出すと

teacher = Person('Mike', 22)
print(f'先生は{teacher.generation}代です')

 >>>先生は<bound method Person.generation of <__main__.Person object at 0x7fec573762b0>>代です

 

こんな感じで表示されてしまいます。

 

 

もちろん呼び出し時に関数に()を付けると

print(f'先生は{teacher.generation()}代です')

>>>先生は20代です

 

 

普通に呼び出せます。