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

Python

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

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

28.07.2013, 17:31. Просмотров 2866. Ответов 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.)?
Правильно ли у меня тут это реализовано?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2013, 17:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как обращаться к переменным внутри класса из его методов? (Python):

Как найти с определенным диапазоном текст внутри сайта и вывести его на IDLE? - Python
Пример: >>> import webbrowser >>> txt = 'https://docs.python.org/2/library/webbrowser.html/' >>> webbrowser.open(txt) True ...

Управляемый цикл через вызовы методов класса - Python
Предположим есть такой класс: class A: def __init__(self, elem): self.elem = elem def push(self): ...

Как получить доступ к переменным одного класса из методов другого - C++ Qt
Есть класс MainWindow с переменными в pablic, и кьютешный QGraphicsView. Нужно вот тут void QGraphicsView::mouseMoveEvent(QMouseEvent*...

Доступ к переменным внутри класса - PHP ООП
чем отличается доступ к объявленной переменной внутри класса указателем $thes->, от доступа к не объявленной переменной? пример: ...

Как правильно обращаться к переменным обьекта? - Java SE
public class Point { public double x, y; Point lowerLeft = new Point(); Point upperRight = new Point(); Point middlePoint =...

Обращение к переменным одного метода из другого внутри класса - C++
Доброго времени суток. Поставлена задача написать программу реализующую матрицу и поостые арифметические действия, определение детерменанта...

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

Если есть ещё вопросы, пиши, постараюсь ответить.
1
helter
Эксперт по математике/физике
3549 / 2566 / 256
Регистрация: 12.03.2013
Сообщений: 4,672
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 на основании полей вызвавшего объекта осуществляются вычисления.

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

Почему нельзя присвоить переменным a, b, c, d значения тексбоксов внутри класса - C#
Почему нельзя присвоить переменным a,b,c,d значения тексбоксов внутри класса? public class Rectangle { public...

Использование массивов внутри методов класса - C++
Нужно сделать так, чтобы массив NextBrick можно было использовать в ShowNB. При этом Массив NextBrick может быть либо вне либо внутри ...

Как узнать имена protected методов класса, имея лишь его строковое название? - PHP ООП
Приветствую. Такой вопрос возник: имеем на входе объект $object какого-то неизвестного нам класса, требуется получить имена всех его...

Как обращаться к объектам на subform-е внутри формы, внутри еще одной формы? - MS Access
У меня есть форма (Form1), в нее вложена подформа (SubForm1), а в неё еще одна (SubForm2). Как обратиться к ComboBox1 на SubForm2 ??? ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.07.2013, 20:21
Ответ Создать тему
Опции темы

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