Obtenir le nom des attributs
Bluscream
J'aimerais obtenir le nom de n'importe quel attribut tout en l'itérant.
le ts3defines.py ressemble à ceci :
class VirtualServerProperties(object):
VIRTUALSERVER_UNIQUE_IDENTIFIER = 0
VIRTUALSERVER_NAME = 1
VIRTUALSERVER_WELCOMEMESSAGE = 2
VIRTUALSERVER_PLATFORM = 3
VIRTUALSERVER_VERSION = 4
VIRTUALSERVER_MAXCLIENTS = 5
VIRTUALSERVER_PASSWORD = 6
VIRTUALSERVER_CLIENTS_ONLINE = 7
VIRTUALSERVER_CHANNELS_ONLINE = 8
VIRTUALSERVER_CREATED = 9
VIRTUALSERVER_UPTIME = 10
VIRTUALSERVER_CODEC_ENCRYPTION_MODE = 11
VIRTUALSERVER_ENDMARKER = 12
la getItems(object)
fonction ressemble à ceci :
def getItems(object):
return [getattr(object, a) for a in dir(object)
if not a.startswith('__') and not callable(getattr(object, a))]
le code en question ressemble à ceci :
for var in getItems(ts3defines.VirtualServerProperties):
(err, var) = ts3.getServerVariable(schid, var)
if err == ts3defines.ERROR_ok and var != "" and var != 0:
i.append('{0}: {1}'.format(var.__name__, var))
Ma question porte sur le fait var.__name__
que cela ne devrait pas renvoyer la chaîne VIRTUALSERVER_BLA
, etc.
Pourquoi cela provoque-t-il ?
11/25/2017 16:07:44 pyTSon.PluginHost.infoData Error Error calling infoData of python plugin Extended Info: Traceback (most recent call last):
File "C:/Users/blusc/AppData/Roaming/TS3Client/plugins/pyTSon/scripts\pluginhost.py", line 476, in infoData
data = p.infoData(schid, aid, atype)
File "C:/Users/blusc/AppData/Roaming/TS3Client/plugins/pyTSon/scripts\info\__init__.py", line 160, in infoData
return self.getServerInfo(schid)
File "C:/Users/blusc/AppData/Roaming/TS3Client/plugins/pyTSon/scripts\info\__init__.py", line 148, in getServerInfo
i.append('{0}: {1}'.format(var.__name__, var))
AttributeError: 'int' object has no attribute '__name__'
Daniel Roseman
Je ne comprends pas pourquoi vous essayez d'accéder à __name__
. Vous avez déjà le nom dans la getItems
méthode ; c'est a
. Vous devriez le retourner et l'utiliser dans la boucle.
def getItems(object):
return [(a, getattr(object, a)) for a in dir(object)
if not a.startswith('__') and not callable(getattr(object, a))]
...
for name, var in getItems(ts3defines.VirtualServerProperties):
(err, var) = ts3.getServerVariable(schid, var)
if err == ts3defines.ERROR_ok and var != "" and var != 0:
i.append('{0}: {1}'.format(name, var))