Форум программистов, компьютерный форум 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
Python Как вывести список файлов внутри вложенных папок?
Python Как сделать суперкласс атрибутом производного класса?
Django Как запустить метод класса из интерфейса администратора?
Python Как записать объект класса в файл?
Python Как в ironpython создать для класса полноценное clr property?
Python Как из строки присваивать значение переменным
dhxdzjbr
Форумчанин
94 / 79 / 2
Регистрация: 06.05.2013
Сообщений: 242
28.07.2013, 18:23     Как обращаться к переменным внутри класса из его методов?   #2
self означает, что перменная становится атрибутом экземпляра класса. Вообще тонкости языка и вообще все подробности описанны в книгах, а в сети чаще всего лежат поверхостные мануалы.

Если есть ещё вопросы, пиши, постараюсь ответить.
helter
Форумчанин
1878 / 1429 / 115
Регистрация: 12.03.2013
Сообщений: 2,354
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     Как обращаться к переменным внутри класса из его методов?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Опции темы

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