我有一个简单的问题。由于一切都是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
答案 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__
,它返回一些有用的信息。我很确定这不会回答您的实际问题,只是您实际问过的问题。