python:使用包含变量的名称访问实例变量

时间:2011-12-22 00:28:41

标签: python variables instance

在python中我正在尝试访问一个实例变量,我需要使用另一个变量的值来确定名称:示例实例变量:user.remote.directory其中它指向'servername:/ mnt的值/ .....'和用户部分包含用户的用户ID,例如joe.remote.directory

从另一个类我需要能够使用包含joe用户ID的变量访问joe.remote.directory。我尝试过variable.remote.directory但它不起作用,有什么建议吗?

3 个答案:

答案 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()