crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> python, аргументы класса
poluna
  опции профиля:
сообщение 21.12.2015, 14:37
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 27
Регистрация: 5.10.2015
Пользователь №: 4458

Спасибо сказали: 1 раз(а)




Репутация:   0  


Есть классы:
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
  опции профиля:
сообщение 21.12.2015, 15:04
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 653
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 104 раз(а)




Репутация:   8  


Аргументы, вы имеете ввиду аттрибуты?
Раскрывающийся текст
Вообще гугл выдает только http://rtfm.co.ua/python-klassy-kratkij-ob...import-klassov/
при поиске по словам "аргументы классов". Но такое использование вообще первый раз вижу, если не затруднит скинте ссылку на определение аттрибутов как аргументов?

Cопоставить что значит? Приравнять(assign)?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
poluna
  опции профиля:
сообщение 21.12.2015, 15:24
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 27
Регистрация: 5.10.2015
Пользователь №: 4458

Спасибо сказали: 1 раз(а)




Репутация:   0  


На да, путаюсь с формулировками, мне нужно такое приведение:
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
  опции профиля:
сообщение 21.12.2015, 15:44
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 653
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 104 раз(а)




Репутация:   8  


Интерпретатор говорит что объект типа "тип" нельзя использовать как dict (и он прав, нет метода __getitem__ :lol: )
Либо используйте __dict__, либо getattr
  for k in SimplePacket().__dict__.iterkeys():
    print k
    print SimpleView.__dict__[k]
    print getattr( SimpleView, k )

Вообще я не гуру питона, но не лучше ли использовать списки, кортежи или те же самые словари?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
poluna
  опции профиля:
сообщение 21.12.2015, 16:16
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 27
Регистрация: 5.10.2015
Пользователь №: 4458

Спасибо сказали: 1 раз(а)




Репутация:   0  


Блин, вот дура! Туплю на такой ерунде! :D
Нет, не лучше, у меня есть много классов вид, и классов пакет, я не знаю в какой момент и что придет, а в них в свою очереь полно полей aka аргументы - атрибуты класса. И по природной лени не хочется описывать и связывать эти много всего друг с другом, да и если добавится дополнительный аргумент, то придется все места где он используется проверять. А тут нужно добавить поля в вид и пакет и наслаждаться! :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 21.12.2015, 16:36
Сообщение #6


Старейший участник
****

Группа: Участник
Сообщений: 653
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 104 раз(а)




Репутация:   8  


Цитата
и наслаждаться! :)

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

Просто непонятно почему именно аттрибуты класса а не ключи в словаре.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
poluna
  опции профиля:
сообщение 21.12.2015, 16:51
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 27
Регистрация: 5.10.2015
Пользователь №: 4458

Спасибо сказали: 1 раз(а)




Репутация:   0  


Ну, как-то так исторически сложилось! :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.4.2017, 15:37