python: 使用包含变量的名称访问实例变量
在Python中,我想访问一个实例变量,但我需要用另一个变量的值来确定这个变量的名字。举个例子,实例变量是user.remote.directory,它指向的值是'servername:/mnt/.....',而user部分包含了用户的ID,比如说joe.remote.directory。
从另一个类中,我需要能够使用一个包含joe的用户ID的变量来访问joe.remote.directory。我试过用variable.remote.directory,但这样不行,有什么建议吗?
3 个回答
1
我建议你创建一个额外的用户对象,然后根据需要把它传递给相关的对象或函数。你现在说得太模糊了,所以很难给你更具体的建议。
举个例子:
class User:
def __init__(self, name, uid=None, remote=None, dir=None):
self.name = name
self.uid = uid
self.remote = remote
self.directory = dir
def get_X(self)
...
def create_some_curios_String(self):
""" for uid = 'joe', remote='localhost' and directory = '/mnt/srv'
this method would return the string:
'joe@localhost://mnt/srv'
"""
return '%s@%s:/%s' % (self.uid, self.remote, self.directory)
class AnotherClass:
def __init__(self, user_obj):
self.user = user_obj
class YetAnotherClass:
def getServiceOrFunctionalityForUser(self, user):
doWhatEverNeedsToBeDoneWithUser(user)
doWhatEverNeedsToBeDoneWithUserUIDandRemote(user.uid, user.remote)
joe = User('Joe Smith', 'joe', 'localhost', '/mnt/srv')
srv_service = ServerService(joe.create_some_curios_String())
srv_service.do_something_super_important()
8
你可以这样引用对象 obj
的实例变量 name
:
obj.__dict__['name']
因此,如果你有另一个变量 prop
,它保存了你想要引用的实例变量的名字,你可以这样做:
obj.__dict__[prop]
如果你发现自己需要这样的功能,你应该问问自己,是否其实更适合使用一个 dict
的实例。
15
我不太确定你具体想要什么,但我觉得 getattr(obj, 'name')
可能会对你有帮助。你可以看看这个链接了解更多信息:http://docs.python.org/library/functions.html#getattr