Задать вопрос

Можно ли передавать ссылку на атрибут класса?

Всем привет.
Возможно глупый вопрос. Но подскажите могу ли я передать ссылку на атрибут экземпляра класса?
Пример:

class Worker():
    """"Класс работника"""
    def __init__(self, first_name, last_name):
        self.first_name = first_name
        self.last_name = last_name

def set_info_to_atr(cls_atr, info):
    cls_atr = info

worker = Worker("Иван", "Иванов")
print(worker.first_name)
set_info_to_atr(worker.first_name, "Петр")
print(worker.first_name)

Выводит :
Иван
Иван

То есть так не работает, и понятно почему. Потому что cls_atr передается как str, а хотелось бы как ссылку на атрибут. Кто нибудь знает как это сделать красиво?

Мне в PyQt нужно соединить сигналы QLineEdit с атрибутами класса. И что бы не писать десятки одинаковых строк коннекта, хотелось передать словарь {Виджет: Атрибут}, который будет обрабатываться.
  • Вопрос задан
  • 274 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 2
@Zanak
Возможно не совсем ответ на ваш вопрос, но поиск по запросу "PyQt MVC example" не поможет отцу русской демократии? :)
Находится например такая ссылка.. Статья старенькая, но надеюсь адаптировать код все таки возможно.
Ответ написан
netpastor
@netpastor
Python developer
def set_info_to_atr(cls, attr_name, info):
    setattr(cls, attr_name, info)

worker = Worker("Иван", "Иванов")
print(worker.first_name)
set_info_to_atr(worker, 'first_name', "Петр")
print(worker.first_name)
Иван
Петр
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
longclaps
@longclaps
Нет, никак невозможно.
И слава богу.
Хочешь баловать со ссылками - изучай perl, там они есть.
Ответ написан
@MechanicZelenyy
В данном случае это не работает, потому что передается не ссылка.

В python неизменяемые величины (числа, строки, кортежи), передаются по значению, а изменяемые (словариб ссылки, пользовательские типы) по ссылке.

Но в любом случае ваш подход это си-стайл, который устарел и так делать не надо.

Если я правильно понял вашу задачу, то используйте properties.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы