Форум программистов, компьютерный форум CyberForum.ru Форум программистов | Компьютерный форум | Форум web-программистов | Форум по электронике и бытовой технике | Форум о софте | Научный форум | Карьера и бизнес
CyberForum.ru - форум программистов и сисадминов > Форум Форум программистов > Форум Python
Восстановить пароль Регистрация

Ответ Создать новую тему
 
28.07.2013, 17:31   #1
Oleg Gorjajnov
Новичок
Регистрация: 22.12.2011
Сообщений: 3
Репутация: 0 (0)
Как обращаться к переменным внутри класса из его методов? / Python

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

Код 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.)?
Правильно ли у меня тут это реализовано?
28.07.2013, 17:31
AdAgent
Объявления
28.07.2013, 18:23   #2
dhxdzjbr
Форумчанин
Регистрация: 06.05.2013
Сообщений: 241
Репутация: 94 (79)
Лучшие ответы: 2
Как обращаться к переменным внутри класса из его методов?

self означает, что перменная становится атрибутом экземпляра класса. Вообще тонкости языка и вообще все подробности описанны в книгах, а в сети чаще всего лежат поверхостные мануалы.

Если есть ещё вопросы, пиши, постараюсь ответить.
Другие темы раздела
При вызове open() выдаёт "No such file or directory" Python
Доброго времени суток! Начал изучать Python по книге Лутца и зациклился на одном моменте. Стоит Python 3.3.2, win7 x64 Описываю ситуацию Создал модуль script1.py: import sys print(sys.platform) print(2 ** 100) x = 'spam'
Что означает кортеж в классе? Python
Если позволите, буду консультироваться по некоторым моментам. Питон исповедую с марта месяца(v3.3), конечно подчитываю и книги и ман, в принципе семантика языка не сложная, да что уж - я просто фанат этого языка! но иногда лень лезть в книгу. Итак, начну свои вопросы: переведите мне вот...
29.07.2013, 00:10   #3
helter
Форумчанин
Регистрация: 12.03.2013
Сообщений: 2,001
Репутация: 1590 (1203)
Лучшие ответы: 88
Как обращаться к переменным внутри класса из его методов?

Цитата Сообщение от Oleg Gorjajnov Посмотреть сообщение
то есть надо внутри класса обращаться к переданным переменным, как self.variable (то есть через self.)?
В принципе, нет. self - просто имя переменной (хотя в данном контексте стандартное).

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

Как любитель лиспа посоветовал бы вам сделать один метод для вычисления корней (он может возвращать, например, список) и другой - для вывода.
29.07.2013, 20:21   #4
dhxdzjbr
Форумчанин
Регистрация: 06.05.2013
Сообщений: 241
Репутация: 94 (79)
Лучшие ответы: 2
Как обращаться к переменным внутри класса из его методов? / Python

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

Похожие темы
Тема Раздел Автор Дата
C++ Qt Как получить доступ к переменным одного класса из методов другого
Есть класс MainWindow с переменными в pablic, и кьютешный QGraphicsView. Нужно вот тут void QGraphicsView::mouseMoveEvent(QMouseEvent* event) { } проверить значение переменной из MainWindow. Как это сделать?
Qt The_Prophet 16.02.2014 16:13
C# WinForms Почему нельзя присвоить переменным a, b, c, d значения тексбоксов внутри класса
Почему нельзя присвоить переменным a,b,c,d значения тексбоксов внутри класса? public class Rectangle { public int a,b,c,d; public void Cons() { a = int.Parse(textBox1.Text);
C# Windows Forms Jeerj 11.12.2013 10:56
C++ обращение к переменным одного метода из другого внутри класса
Доброго времени суток. Поставлена задача написать программу реализующую матрицу и поостые арифметические действия, определение детерменанта и решенеие слау 2 способами посредством классов. В одном методе я ввожу матрицу, как мне использовать ее в другом методе внутри класса?
С++ для начинающих na6tena 03.12.2013 16:13
PHP Как узнать имена protected методов класса, имея лишь его строковое название?
Приветствую. Такой вопрос возник: имеем на входе объект $object какого-то неизвестного нам класса, требуется получить имена всех его функций. get_class_methods (get_class($object)) - конечно же выдает лишь публичные функции, но не protected. Для этого надо по идее унаследоваться по ...
PHP для начинающих qmel 03.08.2013 21:47
PHP ООП доступ к переменным внутри класса
чем отличается доступ к объявленной переменной внутри класса указателем $thes->, от доступа к не объявленной переменной? пример: 1.... public $a;//переменная объявлена public function __construct(){ $thes->a; ... 2....
PHP и ООП Веди 26.11.2012 23:22
Опции темы


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