在python中我正在尝试访问一个实例变量,我需要使用另一个变量的值来确定名称:示例实例变量:user.remote.directory其中它指向'servername:/ mnt的值/ .....'和用户部分包含用户的用户ID,例如joe.remote.directory
从另一个类我需要能够使用包含joe用户ID的变量访问joe.remote.directory。我尝试过variable.remote.directory但它不起作用,有什么建议吗?
答案 0 :(得分:12)
不确定你想要什么,但我认为getattr(obj, 'name')
可能会有所帮助。见http://docs.python.org/library/functions.html#getattr
答案 1 :(得分:5)
您可以通过这种方式引用对象name
的名为obj
的实例变量:
obj.__dict__['name']
因此,如果你有另一个变量prop
,它包含你想要引用的实例变量的名称,你可以这样做:
obj.__dict__[prop]
如果您发现自己需要此功能,那么您应该问自己,实际上使用dict
的实例是不是一个好的情况。
答案 2 :(得分: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()