1 Востаннє редагувалося Q-bart (09.03.2015 14:53:12)

Тема: Класи в Пайтон

Вітаю!
Стикнувся з ООП, класами..
Поясніть мені дещо. Якщо в мене є такий клас.

class SuperStr(str):
def is_palindrom(self):
    s1 = s[::-1]
        if s == s1:
            return True
        else:
            return False

Тепер в мене є стрічка s = 'abba', я хочу дізнатися чи є вона паліндромом.. Як я маю написати команду.

c = s.is_palindrom()

Так? Перед методом через крапку, має бути змінна стрічки, а в дужках, що тоді??? І ще посніть навіщо мені той 'self'??

2 Востаннє редагувалося koala (09.03.2015 22:08:41)

Re: Класи в Пайтон

От у мене те саме питання: нащо вам той self, якщо функція працює з якимось лівим рядком? От якби було

def is_palindrom(self):
    s1 = self[::-1]
        if self == s1:
            return True
        else:
            return False

чи навіть

def is_palindrom(self):
    s1 = self[::-1]
        return self == s1 #нащо нам повертати True/False, якщо цей вираз вже є в s1?

або ж

def is_palindrom(self):
    return self == self[::-1] #та й s1 не потрібен, дякую bunyk за виправлення

то було б очевидно, що self - це той об'єкт (екземпляр класу), для якого викликається функція (фактично - те, що стоїть перед крапкою).
Ну і не певен, що Python зрозуміє, що s = 'abba' - то екземпляр SuperStr. Має бути, гадаю, s = SuperStr('abba'). Хай пітоністи коментують.

Подякували: Q-bart, bunyk2

3 Востаннє редагувалося Q-bart (09.03.2015 16:08:10)

Re: Класи в Пайтон

Дякую..
Має бути так...
екземпляр класу(SuperStr('abba')) + крапка + метод і ()

4

Re: Класи в Пайтон

У вас там був зайвий if. Я б писав якось так:

class SuperStr(str):
    def is_palindrom(self):
        return self == self[::-1]

assert SuperStr('abba').is_palindrom()
assert not SuperStr('asdf').is_palindrom()
Подякували: Q-bart, Blast2

5

Re: Класи в Пайтон

А, koala вже те саме відповів. Хоча в останньому варіанті методу присвоєння замість порівняння. :)

6

Re: Класи в Пайтон

bunyk написав:

Хоча в останньому варіанті методу присвоєння замість порівняння. :)

Так - так, помітив..

7

Re: Класи в Пайтон

Щоб не створювати нової теми, запитаю тут.
В мене є код.

class clas():
    def __init__(self):
        b = 124

    def hello(self):
        print b

Мені треба видрукувати b з другої функції. Друкувати  b не хоче, бо це не глобальна змінна.
Як це можна зробити?

8

Re: Класи в Пайтон

class TestClass():
    def __init__(self):
        self.b = 124
 
    def hello(self):
        print(self.b)

tc = TestClass()
tc.hello()
Подякували: Q-bart, A.N.Onim2

9

Re: Класи в Пайтон

Точно. Дякую!

10

Re: Класи в Пайтон

Q-bart написав:

Вітаю!
Стикнувся з ООП, класами..
Поясніть мені дещо. Якщо в мене є такий клас.

class SuperStr(str):
def is_palindrom(self):
    s1 = s[::-1]
        if s == s1:
            return True
        else:
            return False

Тепер в мене є стрічка s = 'abba', я хочу дізнатися чи є вона паліндромом.. Як я маю написати команду.

c = s.is_palindrom()

Так? Перед методом через крапку, має бути змінна стрічки, а в дужках, що тоді??? І ще посніть навіщо мені той 'self'??

Опа, ти вже класи вчиш.А я тільки свою мову програмування створюю...(напишу пізніше про неї).Доречі, по чому вчиш?

11 Востаннє редагувалося Q-bart (28.04.2015 19:40:56)

Re: Класи в Пайтон

misha_bondar_2012 написав:
Q-bart написав:

Вітаю!
Стикнувся з ООП, класами..
Поясніть мені дещо. Якщо в мене є такий клас.

class SuperStr(str):
def is_palindrom(self):
    s1 = s[::-1]
        if s == s1:
            return True
        else:
            return False

Тепер в мене є стрічка s = 'abba', я хочу дізнатися чи є вона паліндромом.. Як я маю написати команду.

c = s.is_palindrom()

Так? Перед методом через крапку, має бути змінна стрічки, а в дужках, що тоді??? І ще посніть навіщо мені той 'self'??

Опа, ти вже класи вчиш.А я тільки свою мову програмування створюю...(напишу пізніше про неї).Доречі, по чому вчиш?

Я вже давніше їх "вивчив". Щось призабулось. А вчив по курсу на Прометеус http://edx.prometheus.org.ua/courses/KP … 5_T1/about

12

Re: Класи в Пайтон

Я вчу по книжці "Доусон.М.Програмуємо на Пітоні" 8)

13

Re: Класи в Пайтон

Дякую, що скинув.Подвилюся)

14

Re: Класи в Пайтон

Знову виникло запитання.
Наприклад, такий код.

class TestClass():
    def __init__(self):
        self.b = 124


class hello():
    def __init__(self):
        print TestClass.b

c = TestClass()
v = hello()

Тепер, мені треба отримати доступ до b з першого класу в другому класі.
Виводить

AttributeError: class TestClass has no attribute 'b'

15

Re: Класи в Пайтон

або спадкуванням

class TestClass():
    def __init__(self):
        self.b = 124

class hello(TestClass):
    def __init__(self):
        TestClass.__init__(self)
        print(self.b)

v = hello()

або статично

class TestClass():
    b = 124

class hello():
    def __init__(self):
        print(TestClass.b)

v = hello()
Подякували: Q-bart1

16

Re: Класи в Пайтон

Дякую!
А якщо буде так? В першому класі, функція?

class TestClass():
    def a1(self):
        b = 124
        
class hello():
    print TestClass.b

17

Re: Класи в Пайтон

class TestClass():
    def a1(self):
        self.b = 124
        print(self.b)


class hello(TestClass):
    def __init__(self):
        TestClass.__init__(self)
        self.a1()
        print(self.b)

Не вгадуйте. Для більшого розуміння стану речей в ООП, раджу трішки погратися з мовою зі статичною типізацією, наприклад Java.

Подякували: Q-bart1

18

Re: Класи в Пайтон

Тоді треба вчити Java,.. Можливо, можна почитати 4-5 статті, щоб краще розуміти ООП.??
Можливо, щось й порадите?

19

Re: Класи в Пайтон

Не можу пригадати матеріалу, прочитавши котрий, я одразу те ООП вкурив. Практика, порівняння одних і тих самих принципів на різних мовах, якось так.. воно саме випадково прийде))
Почитайте пару глав з першого тому Хорстмана (java), там чітко і по суті все розписано, потім назад до пайтона, потім знову Хорстман - і так декілька ітерацій, поки не побудується картинка в голові, типу "ага, значить класс - це така собі скринька з контентом, ...".

Подякували: Q-bart1

20

Re: Класи в Пайтон

Q-bart написав:

Дякую!
А якщо буде так? В першому класі, функція?

class TestClass():
    def a1(self):
        b = 124
        
class hello():
    print TestClass.b

В цьому випадку, b — локальна змінна в методі a1 класу TestClass, тому за межами цього методу вона недоступна. І що робить print безпосередньо в тілі класу (а не в методі)?

Подякували: Q-bart1