Форум программистов и сисадминов CyberForum.ru
Вернуться   Форум программистов и сисадминов 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, 18:23   #2
dhxdzjbr
Форумчанин
 
Регистрация: 06.05.2013
Сообщений: 241
Репутация: 94 (79)
Лучшие ответы: 2
self означает, что перменная становится атрибутом экземпляра класса. Вообще тонкости языка и вообще все подробности описанны в книгах, а в сети чаще всего лежат поверхостные мануалы.

Если есть ещё вопросы, пиши, постараюсь ответить.
Другие темы раздела Форум программистов Python. Программирование с использованием Python. Помощь в решении задач на Python.
При вызове 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
Сообщений: 1,783
Репутация: 1739 (1081)
Лучшие ответы: 82
Цитата Сообщение от 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
Цитата Сообщение от Oleg Gorjajnov Посмотреть сообщение
то есть надо внутри класса обращаться к переданным переменным, как self.variable (то есть через self.)?
Методам недоступна локальная область видимости класса - им доступны только области видимости вмещающих функций. Именно по этой причине методы должны использовать аргумент self с экземпляром или имя
класса, чтобы вызывать другие методы или обращаться к другим атрибутам, определенным во вмещающей инструкции class.
Старый 29.07.2013, 20:21
Yandex
Объявления
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему

Похожие темы
Тема Автор
PHP и ООП доступ к переменным внутри класса
чем отличается доступ к объявленной переменной внутри класса указателем $thes->, от доступа к не объявленной переменной? пример: 1.... public $a;//переменная объявлена public function __construct(){ $thes->a; ... 2....
Веди
PHP и ООП Как создать экземпляр класса внутри другого, явно не указывая его название
Как создать екземпляр класса внутри класса явно не указывая его название и не присваивая в переменную его название class Test{ static protected $instance; static public function start() { if (!is_a (self::$instance, __CLASS__)){ //$c = __CLASS__; ...
alpex
C# под Web, ASP.NET vb.net, asp.net - вопрос по переменным внутри класса
Теоретический вопрос - есть вебформа, с полями и кнопкой submit в коде два метода - Page_Load и Button1_Click в Page_Load делается некоторый расчет и переменной, которая объявлена на уровне класса задается вычисленное значение. Как сделать так, чтобы при нажатии на кнопку в Button1_Click...
vbnet
MS Access как обращаться к объектам на subform-е внутри формы, внутри еще одной формы
У меня есть форма (Form1), в нее вложена подформа (SubForm1), а в неё еще одна (SubForm2). Как обратиться к ComboBox1 на SubForm2 ??? Запись типа: Forms!..!.RowSource = ... не проходит. Если только одна вложенная, то так работает, а 2 уже нет. Заранее благодарен
@nt.on
VBA как обращаться к объектам на subform-е внутри формы, внутри еще одной формы
У меня есть форма (Form1), в нее вложена подформа (SubForm1), а в неё еще одна (SubForm2). Как обратиться к ComboBox1 на SubForm2 ??? Запись типа: Forms!..!.RowSource = ... не проходит. Если только одна вложенная, то так работает, а 2 уже нет. Заранее благодарен
@nt.on
Опции темы

Текущее время: 21:01. Часовой пояс GMT +4.

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.