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?
Даже если допустить, что у них имена одинаковые, без нижних подчеркиваний?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов (1 - 6)
lanz
  опции профиля:
сообщение 21.12.2015, 15:04
Сообщение #2


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

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

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




Репутация:   8  


Аргументы, вы имеете ввиду аттрибуты?
Раскрывающийся текст
Вообще гугл выдает только Link
при поиске по словам "аргументы классов". Но такое использование вообще первый раз вижу, если не затруднит скинте ссылку на определение аттрибутов как аргументов?

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


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

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

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




Репутация:   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


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

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

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




Репутация:   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 Текстовая версия Сейчас: 16.12.2025, 17:22