LoginSignup
4
5

More than 5 years have passed since last update.

Python3 関数にプロパティを設ける

Last updated at Posted at 2018-08-31

あんまりググってないし、ドキュメント等を確認できているわけではないのですごくラフな投稿。よく考えればできても不思議ではないと思ったのですが、初見時意外に思ったので、思い付きでポストしてます(要は備忘録)。。突っ込みどころ満載かもしれません(突っ込んでください1。特に用語が曖昧です。この記事では属性とプロパティを混同してます。)

まず前提として

「オブジェクトにプロパティ」と聞くとclassを定義して云々するのが普通の感覚だと思います。

python3
class Hoge(object):
    def __init__(self, name):
        self.attr = f"{name}'s attr"

if __name__=="__main__":
    h = Hoge("namnium")
    print(h.attr) # => namnium's attr

が、なんか関数自体にも属性値をつけられるというね。。JavaScriptみたい2

python3
def f():
    return 0
f.attr = "f's attr"
print(f.attr) # => f's attr
python3
a = lambda : "hoge"
a.b = "fuga"
print("a: ", a()) # => hoge
print("a.b: ", a.b) # => fuga

Djangoのチュートリアル中に出てきたメソッドにこの方法での属性値設定が行われていたので、少し実験してみましたという感じです。。

できないのはわかっていましたが、文字列やリストでもやってみましたけどやっぱり無理でした。。リストでもできないということは mutable かどうかとかが関係してるわけでもなさそう...

なにか属性を付けられるオブジェクトに法則性がありそうですが、それについてはこれからドキュメント等を調べようと思います。

Djangoのようにフレームワークで使うならわかりますが機能としては普段は使わなさそう...何かわかり次第追記します。


  1. 「ここに書いてるしもっとggrks。こんなゴミ記事量産するな」という方はぜひ教えていただけると幸いです。。「ここは質問サイトではありません」とおっしゃる方がいるかもしれないですけど、質問というわけではなくどちらかというと独り言ですのでスルーしていただけると幸いです。 

  2. functionが第一級オブジェクトとして扱える、というもので、関数型言語の特徴らしい。。(Wikipediaの受け売り) 

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5