0

簡単な質問があります。Python ではすべてがオブジェクトであるため、組み込みオブジェクトの内部属性にアクセスできますか。

たとえばa='some String' 、文字列オブジェクトの内部属性にアクセスしたいa

これが私が試したことです:-

 for x in dir(a):
  if not callable(eval('a.' + x)):
   print x

しかし、次のように出力されます。

__doc__

しかし、このオブジェクトから他の属性にアクセスしたいと思います。これは、オブジェクト自体が使用するものです。

このオブジェクトの抽象属性にアクセスする方法はありますか?

詳しく説明すると:

class Some(object):
 def __init__(self, initialiser):
  self.initialiser = initialiser

s = Some('Any object can be put here, I am using a string')

print s.initialiser ## This is how I'm accessing the attribute of the class Some. Similarly, can I ##access the attributes of the string object `a` defined above?

print s# 私に与えます:<__main__.Some object at 0x02371AF0>

では、なぜそのprint aような出力が得られないのでしょうか。なぜなら、印刷時にいくつかのメソッドが呼び出されa、実際の文字列シーケンスが保存されているメモリにアクセスして印刷するためです。しかし、これは私が印刷すると起こりませんs

4

3 に答える 3

2

Python 組み込み型のプライベート属性は、あったとしてもほとんどないため、Python でアクセスできないものはほとんどありません。

あなたは本当にpython datamodelを読んで、inspect モジュール(ソースコードを含む) を調べたいと思っています。

これで、Python でアクセスできるものとできないものについて知っておく必要があることがすべてわかります。

于 2012-09-04T18:28:56.150 に答える
0

オーバーライドされない限りdir()、オブジェクトのマングルされていないすべての属性のリストが提供されます (オーバーライドされた場合、通常は正当な理由があります)。出力として得られる理由__doc__は、それが文字列型の唯一の呼び出し不可能な属性であり、残りはメソッドであるためです。通常の属性ルックアップを介して直接アクセスできます。

>>> s = 'string'
>>> print s.__doc__
str(object) -> string

Return a nice string representation of the object.
If the argument is a string, the return value is the same object.

この型には他にどのような属性が期待されていましたstrか?

文字列を印刷すると文字列が得られるのに対し、クラスを印刷するとより抽象的な表現が得られる理由については、オブジェクトprintのメソッドを呼び出して__str__、人間に優しい表示を提供できるようにします。文字列の場合、これは明らかに文字列そのものです。クラスの場合、より一般的なデフォルトが使用されます。

于 2012-09-05T01:24:24.240 に答える
-1

print obj を実行すると、python は__str__オブジェクトのメソッドを呼び出します。文字列の場合、結果は明らかですが、カスタム クラスの場合、デフォルト__str__メソッドは を呼び出します__repr__。これは、いくつかの有用な情報を返します。これはあなたの実際の質問には答えず、あなたが実際に尋ねた質問に答えていると確信しています。

于 2012-09-04T19:01:21.900 に答える