Форум программистов, компьютерный форум CyberForum.ru
CyberForum.ru - форум программистов и сисадминов > >
Восстановить пароль Регистрация
 
Oleg Gorjajnov
Новичок
0 / 0 / 0
Регистрация: 22.12.2011
Сообщений: 3
28.07.2013, 17:31     Как обращаться к переменным внутри класса из его методов?   #1
Только начинаю осваивать ооп и наткнулся на проблему, ответ на которую не смог найти, гугля несколько часов.
Есть такой чисто тестовый код, использующий парадигму ооп:

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

Посмотрите здесь:

Python Вызов класса как функции

Python Python 3.2: как правильно обращаться с типом Decimal

Django Как при нажатии на столбец отсортировать его?

Python Как вывести список файлов внутри вложенных папок?

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

Django Как запустить метод класса из интерфейса администратора?

Python Как записать объект класса в файл?

Python Как в ironpython создать для класса полноценное clr property?

Python Как из строки присваивать значение переменным

Python Как в этом примере заставить класс ColorLabel изменять canvas’и из класса Window?

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

Если есть ещё вопросы, пиши, постараюсь ответить.
helter
Форумчанин
1690 / 1303 / 100
Регистрация: 12.03.2013
Сообщений: 2,200
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
Форумчанин
94 / 79 / 2
Регистрация: 06.05.2013
Сообщений: 242
29.07.2013, 20:21     Как обращаться к переменным внутри класса из его методов?   #4
Цитата Сообщение от Oleg Gorjajnov Посмотреть сообщение
то есть надо внутри класса обращаться к переданным переменным, как self.variable (то есть через self.)?
Методам недоступна локальная область видимости класса - им доступны только области видимости вмещающих функций. Именно по этой причине методы должны использовать аргумент self с экземпляром или имя
класса, чтобы вызывать другие методы или обращаться к другим атрибутам, определенным во вмещающей инструкции class.
Yandex
Объявления
29.07.2013, 20:21    Как обращаться к переменным внутри класса из его методов?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему
Опции темы

Текущее время: 03:06. Часовой пояс GMT +4.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.