Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: python, аргументы класса
Форум на CrossPlatform.RU > Разработка > Интерпретируемые языки
poluna
Есть классы:
class SimpleView(object):
    id=0
    status=1
    name=2
    ip=3
    end=4

class SimplePacket(object):
   def __init__(self):
        self._id=None
        self._status=None
        self._name=None
        self._ip=None
Я могу перечислить все аргументы класса SimplePacket:
for k in SimplePacket().__dict__.iterkeys():
    print k
Вопрос, как сопоставить аргумент объекта SimplePacket с аргументом класса SimpleView?
Даже если допустить, что у них имена одинаковые, без нижних подчеркиваний?
lanz
Аргументы, вы имеете ввиду аттрибуты?
Раскрывающийся текст
Вообще гугл выдает только http://rtfm.co.ua/python-klassy-kratkij-ob...import-klassov/
при поиске по словам "аргументы классов". Но такое использование вообще первый раз вижу, если не затруднит скинте ссылку на определение аттрибутов как аргументов?

Cопоставить что значит? Приравнять(assign)?
poluna
На да, путаюсь с формулировками, мне нужно такое приведение:
for k in SimplePacket().__dict__.iterkeys():
    print SimpleView[k[1;]]
Но в данном коде выдается ошибка:
Цитата
TypeError: 'type' object has no attribute '__getitem__'
:(

Это мне нужно, чтобы не писать кучу строк вроде:
model.setData(model.index(self._modelIndex.row(), SimpleView.id), sp._id) # sp = SimplePacket()
lanz
Интерпретатор говорит что объект типа "тип" нельзя использовать как dict (и он прав, нет метода __getitem__ :lol: )
Либо используйте __dict__, либо getattr
  for k in SimplePacket().__dict__.iterkeys():
    print k
    print SimpleView.__dict__[k]
    print getattr( SimpleView, k )

Вообще я не гуру питона, но не лучше ли использовать списки, кортежи или те же самые словари?
poluna
Блин, вот дура! Туплю на такой ерунде! :D
Нет, не лучше, у меня есть много классов вид, и классов пакет, я не знаю в какой момент и что придет, а в них в свою очереь полно полей aka аргументы - атрибуты класса. И по природной лени не хочется описывать и связывать эти много всего друг с другом, да и если добавится дополнительный аргумент, то придется все места где он используется проверять. А тут нужно добавить поля в вид и пакет и наслаждаться! :)
lanz
Цитата
и наслаждаться! :)

А кто мешает наслаждаться используя dict? :lol:
for k in d:
  print d[k]

Просто непонятно почему именно аттрибуты класса а не ключи в словаре.
poluna
Ну, как-то так исторически сложилось! :)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.