@ user2357112 является правильным (и хорошим уловом, потому что я не видел его):
Тем не менее, у меня есть несколько замечаний по поводу кода.
Первое:
class convert_to_obj(object):
очень плохое имя для класса. Это было бы хорошее имя для функции. Вы должны лучше назвать, например:
class DictObject(object):
Это, как говорится, я бы посоветовал вам использовать существующие инструменты для выполнения такой вещи. В модуле collections
есть мощный редактор под названием namedtuple
. Для того, чтобы сделать свое дело, вы можете сделать:
from collections import namedtuple
# Create a class that declares the interface for a given behaviour
# which will expect a set of members to be accessible
class AuthenticationMixin():
def is_authenticated(self):
username = self.username
password = self.password
# useless use of if, here you can simply do:
# return username and password
if username and password:
return True
# but if you don't, don't forget to return False below
# to keep a proper boolean interface for the method
return False
def convert_to_object(d): # here that'd be a good name:
# there you create an object with all the needed members
DictObjectBase = namedtuple('DictObjectBase', d.keys())
# then you create a class where you mix the interface with the
# freshly created class that will contain the members
class DictObject(DictObjectBase, AuthenticationMixin):
pass
# finally you build an instance with the dict, and return it
return DictObject(**d)
который дал бы:
>>> new_array = [{'username': u'rr', 'password': u'something', }]
>>> # yes here I access the first element of the array, because you want
>>> # to keep the convert_to_object() function simple.
>>> o = convert_to_object(new_array[0])
>>> o
DictObject(password='something', username='rr')
>>> o.is_authenticated()
True
все, что является более удобным для чтения и простой в использовании.
NB: для списка dicts для преобразования, просто сделать:
>>> objdict_list = [convert_to_object(d) for d in new_array]
>>> objdict_list
[DictObject(password='something', username='rr')]
И если вы работаете со списком пар, а не в Словаре:
>>> tup_array = [('username', u'rr'), ('password', u'something')]
>>> {t[0]:t[1] for t in tup_array}
{'password': 'something', 'username': 'rr'}
Таким образом, вам не нужна дополнительная работа с ногами в __init__()
.
НТН
КСТАТИ Я добавил Q на мета о создании [язычки видимых] (http://meta.stackoverflow.com/questions/319326/make-tabs-actually-visible-in-code- разделы постов) в рендеринге – zmo