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 数据模型,并研究检查模块(包括它的源代码)。

这将告诉你所有你需要知道的关于你可以和不能在 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

当您打印 obj 时,python 会调用__str__对象上的方法。对于字符串,结果是显而易见的,但对于您的自定义类,默认__str__方法调用__repr__,它返回一些有用的信息。我很确定这并不能回答您的实际问题,而只是您实际提出的问题。

于 2012-09-04T19:01:21.900 回答