5

私は Python を学んでおり、記述子をよりよく理解しようとしています。この Python オンライン ブック: http://www.cafepy.com/article/python_attributes_and_methods/ch01s05.htmlを見ると、次のように書かれています。

  1. attrname が objectname の特別な (つまり、Python が提供する) 属性である場合、それを返します。

Python提供の意味がわかりません。誰かが、通常の解決順序よりも優先される Python 提供の属性の例を教えてもらえますか?

注:私は新しいスタイルのクラスにのみ興味があります(私の知る限り、記述子は古いスタイルには適用されません)。

4

2 に答える 2

1

__class__、 例えば:

>>> class Test(object):
    __dict__ = {'__class__' : "dict of Test"}
    def __init__(self):
        self.__dict__['__class__'] = "dict of test"


>>> test = Test()
>>> test.__class__
<class '__main__.Test'>
>>> test.__dict__
{'__class__': 'dict of test'}
>>> Test.__dict__
dict_proxy({'__dict__': {'__class__': 'dict of test'}, '__module__': '__main__', '__weakref__': <attribute '__weakref__' of 'Test' objects>, '__doc__': None, '__init__': <function __init__ at 0x02BD2770>})
>>> 

古いスタイルのクラスで同等:

>>> class Test:
        pass

>>> Test.__dict__["__class__"] = "spam"
>>> test = Test()
>>> test.__class__
<class __main__.Test at 0x02BD1110>
>>> test.__dict__ = {'__class__': "foo"}
>>> test.__class__
<class __main__.Test at 0x02BD1110>

その間

>>> test.__dict__ = {'__lolcat__': "bar"}
>>> test.__lolcat__
'bar'

オブジェクトのタイプに応じて、さらに多くの特別な属性名があります。たとえば、関数:

>>> def test():pass

>>> dir(test)
['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name']
>>> test.func_closure
>>> test.__dict__['func_closure']='roflcopter'
>>> test.func_closure
>>> test.__dict__['foo']='bar'
>>> test.foo
'bar'

概要については、http://docs.python.org/reference/datamodel.htmlを参照してください。

于 2012-05-10T15:00:53.957 に答える
0

ご想像のとおり、ステップ 1 は完全に間違っており、存在しません。

于 2012-10-05T23:13:00.470 に答える