Como você obtém uma lista de todas as variáveis em uma classe iterável? Mais ou menos como moradores (), mas para uma aula
class Example(object):
bool143 = True
bool2 = True
blah = False
foo = True
foobar2000 = False
def as_list(self)
ret = []
for field in XXX:
if getattr(self, field):
ret.append(field)
return ",".join(ret)
isso deve retornar
>>> e = Example()
>>> e.as_list()
bool143, bool2, foo
for field in [ self.bool143, self.bool2, self.blah, self.foo, self.foobar2000 ]
? Como é que você não conhece as variáveis de instância da classe?Respostas:
fornece todos os atributos do objeto. Você mesmo precisa filtrar os membros de métodos etc.:
Darei à você:
fonte
callable(attr)
funciona? Não éattr
uma corda?vars(Example).items()
ou emvars(instance.__class__).items()
vez dedir()
se deseja verificar se é possível ou não, porque dir só retornará 'string
s como nomes ..Se você quiser apenas as variáveis (sem funções), use:
fonte
vars
que não incluem as variáveis de classe, apenas as variáveis de instância.members = list(vars(example).keys())
as (pelo menos em python3)vars
retorna umdict
mapeamento do nome da variável de membro para seu valor.@truppo: sua resposta está quase correta, mas chamável sempre retornará falso, já que você está apenas passando uma string. Você precisa de algo como o seguinte:
que irá filtrar funções
fonte
- como você vê, isso dá a você todos os atributos, então você terá que filtrar um pouco. Mas basicamente
dir()
é o que você está procurando.fonte
Usa isto.
fonte
fonte
A maneira fácil de fazer isso é salvar todas as instâncias da classe em a
list
.Os objetos não surgem espontaneamente. Alguma parte do seu programa os criou por um motivo. A criação é feita por um motivo. Colecioná-los em uma lista também pode ser feito por um motivo.
Se você usa uma fábrica, pode fazer isso.
fonte