Форум программистов, компьютерный форум CyberForum.ru

Python

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.67
Oleg Gorjajnov
0 / 0 / 0
Регистрация: 22.12.2011
Сообщений: 3
#1

Как обращаться к переменным внутри класса из его методов? - Python

28.07.2013, 17:31. Просмотров 2612. Ответов 3
Метки нет (Все метки)

Только начинаю осваивать ооп и наткнулся на проблему, ответ на которую не смог найти, гугля несколько часов.
Есть такой чисто тестовый код, использующий парадигму ооп:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#coding:utf-8
import math
 
class QuadraticEquation(object):
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c
    
    def solve_quad_eq(self):
        D = self.b**2-4*self.a*self.c
        if D > 0:
            x1 = -self.b-math.sqrt(D)/2*self.a
            x2 = -self.b+math.sqrt(D)/2*self.a
            print "Первый корень: %.2f, второй корень: %.2f" % (x1, x2)
        elif D == 0:
            x12 = -(self.b/2*self.a)
            print "x1=x2=%.2f" % (x12)
        else:
            print "Корней нет"
            exit()
В начале класса вызывается конструктор __init__, который принимает четыре аргумента и присваивает их соответствующим переменным. И вопрос (возможно очень тупой):
то есть надо внутри класса обращаться к переданным переменным, как self.variable (то есть через self.)?
Правильно ли у меня тут это реализовано?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2013, 17:31     Как обращаться к переменным внутри класса из его методов?
Посмотрите здесь:

Вызов класса как функции Python
Python 3.2: как правильно обращаться с типом Decimal Python
Как вывести список файлов внутри вложенных папок? Python
Python Как записать объект класса в файл?
Python Как из строки присваивать значение переменным
Python. Использование потоков внутри класса Python
Python Pickle: не сохраняется список внутри класса
Присвоение переменным содержимого QLineEdit Python
Python Как изменить внешнюю переменную типа int внутри функций?
Служебная функция внутри класса Python
Python Управляемый цикл через вызовы методов класса
Python Какая разница между объектом класса и инстансом класса?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dhxdzjbr
96 / 81 / 2
Регистрация: 06.05.2013
Сообщений: 242
28.07.2013, 18:23     Как обращаться к переменным внутри класса из его методов? #2
self означает, что перменная становится атрибутом экземпляра класса. Вообще тонкости языка и вообще все подробности описанны в книгах, а в сети чаще всего лежат поверхостные мануалы.

Если есть ещё вопросы, пиши, постараюсь ответить.
helter
Эксперт по математике/физике
3423 / 2440 / 243
Регистрация: 12.03.2013
Сообщений: 4,491
29.07.2013, 00:10     Как обращаться к переменным внутри класса из его методов? #3
Цитата Сообщение от Oleg Gorjajnov Посмотреть сообщение
то есть надо внутри класса обращаться к переданным переменным, как self.variable (то есть через self.)?
В принципе, нет. self - просто имя переменной (хотя в данном контексте стандартное).

Метод есть функция. Однако смысл метода состоит в том, что он непременно должен знать, какой именно объект его вызывает. Например, для объекта QuadraticEquation(1, 2, 3) метод solve_quad_eq должен вернуть один результат, а для объекта QuadraticEquation(1, 2, -3) - другой. Естественный способ для функции знать что-либо - это получить эту вещь в качестве аргумента. Таким образом, метод должен получать вызвавший его объект в качестве аргумента. Иначе это не метод, а чёрт знает что. В питоне это сделано максимально прозрачно: при определении метода вызвавший объект передаётся как первый аргумент. Традиционно он называется self, и этой традиции стоит следовать, хотя она не отражает требований языка. В ваших методах: в __init__ происходит инициализация полей вызвавшего объекта, в solve_quad_eq на основании полей вызвавшего объекта осуществляются вычисления.

Как любитель лиспа посоветовал бы вам сделать один метод для вычисления корней (он может возвращать, например, список) и другой - для вывода.
dhxdzjbr
96 / 81 / 2
Регистрация: 06.05.2013
Сообщений: 242
29.07.2013, 20:21     Как обращаться к переменным внутри класса из его методов? #4
Цитата Сообщение от Oleg Gorjajnov Посмотреть сообщение
то есть надо внутри класса обращаться к переданным переменным, как self.variable (то есть через self.)?
Методам недоступна локальная область видимости класса - им доступны только области видимости вмещающих функций. Именно по этой причине методы должны использовать аргумент self с экземпляром или имя
класса, чтобы вызывать другие методы или обращаться к другим атрибутам, определенным во вмещающей инструкции class.
Yandex
Объявления
29.07.2013, 20:21     Как обращаться к переменным внутри класса из его методов?
Ответ Создать тему
Опции темы

Текущее время: 11:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru