Форум сайта python.su
-1
Вот так выглядит код если ты собираешься изменить заранее известную переменную:
# coding=utf-8 class НекийКласс: def увеличить_переменную(self): self.а += 1 объект = НекийКласс() объект.а = 1 объект.увеличить_переменную()
class НекийКласс: def увеличить_переменную(self, переменная): переменная += 1 return переменная объект = НекийКласс() объект.а = 1 объект.а = объект.увеличить_переменную(объект.а)
Отредактировано MiK (Фев. 4, 2015 11:48:19)
Офлайн
39
Начнем с того, что это не переменная, а атрибут. Ну и сам вопрос напрашивается. Почему не хотите менять атрибут явно? Если Вы знаете, что атрибут существует, так поменяйте его значение явно и не мучайтесь.
P.S. Создавать атрибут после создания экземпляра класса (объекта) не очень хороший тон…
Отредактировано 4kpt_III (Фев. 4, 2015 11:51:39)
Офлайн
-1
4kpt_III
Каким образом я его изменю явно, если не могу указать какой именно надо обработать?
Офлайн
49
4kpt_III
P.S. Создавать атрибут после создания экземпляра класса (объекта) не очень хороший тон…
>>> class A: ... def __init__(self): ... self.a = 1 >>> a = A() >>> a.a 1 >>> a.a + 1 2 >>> a.b = 2 >>> a.c = 100500 >>> a.d = a.b - a.c >>> a.d -100498 >>> a.__dict__ {'a': 1, 'b': 2, 'c': 100500, 'd': -100498} >>> a.__dict__['a'] = 8
Офлайн
49
MiK
Каким образом я его изменю явно, если не могу указать какой именно надо обработать?
Офлайн
-1
Alen
Спасибо, не знал про __dict__
Но на первый взгляд, это тоже не очень удобно. Я так понимаю вариантов больше нет, передавать только словари или списки и изменять с помощью их методов вроде список.append(чегототам)?
Почему так сделано?
Офлайн
39
MiK
Потому как класс в ООП вообще-то не для этого 
Офлайн
49
MiK
Я так понимаю вариантов больше нет, передавать только словари или списки
MiK
Почему так сделано?
>>> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!
Офлайн
-1
4kpt_III
Ну да ладно! Для чего же тогда ООП???
Отредактировано MiK (Фев. 4, 2015 14:06:29)
Офлайн
-1
Может есть какой-то декоратор вроде setter?
Офлайн