1

インスタンスが最初にバインドされた変数を特定する方法はありますか?

関数を使用すると、次のことができます。

def f():
    pass
print f.__name__
>> f
g = f
print g.__name__
>> f

私が欲しいのは:

class c:
    pass

mything = c()
print mything.__name__
>> mything

これが必要な理由は、私が書いている API のより直感的なログ/エラー メッセージのためです。

print mything
>> instance of c originally bound to 'mything'

通常の代わりに:

print mything
>> <__main__.c instance at 0x7fb7994b25a8>

__name__そして(私が思うに?)人々が常に明示的に属性を提供しないようにするのはいいこと__init__です..

これは可能ですか?賢明ですか?

4

3 に答える 3

1

方法はありません。もし方法があったとしても、あなたが思っているほど役に立ちません。関数を定義するときは、名前を付けます。関数へのほとんどの参照では、その名前が使用されます。一方、他のオブジェクトは、1 つの名前にそれほど厳密に結び付けられない傾向があります。

def factory_function(parameter):
    obj = Thing(parameter)
    obj.preprocess_somehow()
    return obj

game_window = factory_function(parameter)
menu_screen = factory_function(parameter)
subscreens = [factory_function(parameter) for parameter in params]

ここでのオブジェクトの最も興味深い名前はgame_windowmenu_screen、およびですが、バインドされている「最初の変数」は、 またはアロケーター関数の C レベルの変数のいずれかまたはsubscreensそれ以前のものです。のアイテムには、有用な個別の名前すらありません。game_windowmenu_screenobjselfsubscreens

于 2013-09-03T23:35:15.573 に答える