访问内置的内部属性

时间:2012-09-04 18:11:54

标签: python attributes abstraction built-in

我有一个简单的问题。由于一切都是python中的对象,我可以访问内置对象的内部属性。

e.g。 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

时,这不会发生

3 个答案:

答案 0 :(得分:2)

在Python中很少有人无法访问,因为Python内置类型的私有属性很少(如果有的话)。

您真的想要阅读python datamodel,并研究inspect module(包括source code)。

这将告诉你所有你需要了解的内容,你可以在python中访问和不能访问。

答案 1 :(得分: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__方法,这样可以实现人性化的显示提供。对于字符串,这显然是字符串本身。对于类,使用更通用的默认值。

答案 2 :(得分:-1)

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