Форум сайта python.su
0
пусть есть строка
a = "ololo"
class wtf : def gg(self): print "Всем заранее спасибо" key = 0 b = wtf()
print b.ololo
Отредактировано i_am_kisly (Июнь 2, 2013 15:57:29)
Офлайн
568
setattr(b, a, 1000) print b.ololo
Офлайн
0
а как теперь обратиться к этой переменной ?
допустим такая вот ситуация :
#изначально не знаем содержимого a a = 'ololo' class B(): def add_new_attr(self, var): self.var = var setattr(self, self.var, '100500') # как теперь обратится к только что созданной переменной в этом шаблоне класса print self. ? #мы ведь не знаем что ей было назначено имя ololo
Отредактировано i_am_kisly (Июнь 8, 2013 20:42:20)
Офлайн
88
getattr
Офлайн
0
Спасибо, а если перевернуть задачу ? Есть несколько экземпляров класса, в каждом атрибут с одинаковым названием, но разным значением. как по значению атрибута получить имя класса ? Как я понимаю, надо получить все экземпляры класса (опять же как ?) и перебрать ? или есть друго более простой способ ?
Офлайн
568
class Foo(object):pass f = Foo() print f.__class__
Офлайн
0
class Foo(object): key = 0 pass f = Foo() f.key = 1 g = Foo() f.key = 2 h = Foo() f.key = 3 j = = Foo() f.key = 4 ... x = Foo() f.key = 100500
Отредактировано i_am_kisly (Июнь 10, 2013 08:15:16)
Офлайн
0
и еще вопрос. в php можно сделать вот так :
$name = 'name_too' $$name = 'name_two' print $name_too
Офлайн
568
# -*- coding:utf-8 -*- InstancesList = dict() def get_instance_by_attribute(attr_name): class wrapper(object): def __init__(self, cls): self.cls = cls setattr(cls, "get_by_attr", self.get_by_attr) def __call__(self, *args, **kwargs): instance = self.cls(*args, **kwargs) InstancesList.setdefault(self.cls, list()).append(instance) return instance def get_by_attr(self, value): return [x for x in InstancesList[self.cls] if getattr(x, attr_name) == value] return wrapper @get_instance_by_attribute("key") class Foo(object): pass f = Foo() f.key = 1 f.d = 1 g = Foo() g.key = 2 g.d = "ff" h = Foo() h.key = 3 h.d = False j = Foo() j.key = 4 j.d = 5.77 x = Foo() x.key = 100500 x.d = 123 y = Foo() y.key = 100500 y.d = "Bar" for instance in Foo.get_by_attr(100500): print instance, instance.d
Офлайн
568
i_am_kislyЗачем? Я бы с ума сошел в таком коде ковыряться
и еще вопрос. в php можно сделать вот так :
Офлайн