Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 8, 2016 22:36:21

Ethan
Зарегистрирован: 2016-02-08
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос об ООП Python

Суть в следующем: Раньше я имел дело только с процедурными языками, писал некоторые скрипты на процедурных языках. Недавно я столкнулся с ООП и для меня остаются непонятными многие вещи, а в частности - наследование:

Я изучаю Пайтон по книге «A Byte of Python 2.0» (Для Пайтон 3) и на 108 странице этой книги (на русском) есть параграф, посвященный наследованию. Как объясняется, само наследование создано для упрощения жизни программисту. Но из примера, приведенного в том же параграфе, я не совсем понял, что именно там упрощается? Что вообще там наследуется? То, что не нужно создавать поля (если не ошибаюсь, а то для меня переменные - и в африке переменные, и в “классах” тоже)? Точнее сказать - определять их. Но тогда ведь в параметрах методов все-равно придется принимать и новосозданные поля из родительского класса? И надо опять редачить код метода в субклассах? И смысл этого наследования тогда?

Если я что-то не понял - объясните пожалуйста)

А вот и собственно сам код:

class SchoolMember:
	def __init__(self, name, age):
		self.name = name
		self.age = age
		print('(Создан ScoolMember: {0})'.format(self.name))
	def tell(self):
		print('Имя:"{0}" Возраст:"{1}"'.format(self.name,self.age), end = " ")
		
class Teacher(SchoolMember):
	def __init__(self, name, age, salary):
		SchoolMember.__init__(self, name, age)
		self.salary = salary
		print('(Создан Teacher: {0})'.format(self.name))
		
	def tell(self):
		SchoolMember.tell(self)
		print('Зарплата: "{0:d}"'.format(self.salary))
		
class Student(SchoolMember):
	def __init__(self, name, age, marks):
		SchoolMember.__init__(self, name, age)
		self.marks = marks
		print('(Создан Teacher: {0})'.format(self.name))
		
	def tell(self):
		SchoolMember.tell(self)
		print('Зарплата: "{0:d}"'.format(self.marks))
		
t = Teacher('Slut Number One',25,900000)
s = Student('Punk Number One',25,756891297)
members = [t,s]
for member in members:
	member.tell()
input('Press Enter')

Отредактировано Ethan (Фев. 8, 2016 22:37:38)

Офлайн

#2 Фев. 9, 2016 00:07:03

Rudium
Зарегистрирован: 2015-12-06
Сообщения: 114
Репутация: +  1  -
Профиль   Отправить e-mail  

Вопрос об ООП Python

Какая разница, упрощает ли жизнь ООП, программистам использующим ООП? Если вам лично не упрощает (ввиду сложности понимания концепции ООП) значит не используйте его. Это не серебряная пуля, а вопрос личной приверженности и вкуса.

Отредактировано Rudium (Фев. 9, 2016 03:52:16)

Офлайн

#3 Фев. 9, 2016 04:45:17

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вопрос об ООП Python

import datetime
class Person(object):
   def __init__(self, name, age):
        self.name = name
        self.age = age
        print('(Создан ScoolMember: {0})'.format(self.name))
   def born_year(self):
       return datetime.datetime.today().year - self.age
   def tell(self):
       print('Имя:"{0}" Возраст:"{1}"'.format(self.name,self.age))
class SchoolMember(Person):
    def __init__(self, name, age, salary):
        super(SchoolMember, self).__init__(name, age)
        self.salary = salary
        print('(Создан Teacher: {0})'.format(self.name))
    def tell(self):
        super(SchoolMember, self).tell()
        print('Зарплата: "{0:d}"'.format(self.salary))
class Teacher(SchoolMember):
    iq = 160
    def moo(self):
        print("I am teacher")
class Student(SchoolMember):
    iq = 63
    def moo(self):
        print("I am studentr")
t = Teacher('Slut Number One',25, 900000)
s = Student('Punk Number One',25, 756891297)
print (s.born_year(), t.born_year())
print (s.moo(), t.moo())
print (s.iq, t.iq)
s.tell()
t.tell()



Офлайн

#4 Фев. 9, 2016 04:51:58

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вопрос об ООП Python

Rudium
Какая разница, упрощает ли жизнь ООП, программистам использующим ООП? Если вам лично не упрощает (ввиду сложности понимания концепции ООП) значит не используйте его. Это не серебряная пуля, а вопрос личной приверженности и вкуса.
Странная позиция. Питон - объектно-ориентированный язык, хочется вам этого или нет. С этим фактом придется смириться и принять. Каждый ЯП исповедует какую-то свою идеологию, и вы либо принимаете её и используете предоставленные возможности либо ищите для себя другой инструмент. Если ООП для кого-то слишком сложная концепция, то этому товарищу нужно идти подметать трамвайные пути или крутить хвосты коровам.



Офлайн

#5 Фев. 9, 2016 07:15:20

Rudium
Зарегистрирован: 2015-12-06
Сообщения: 114
Репутация: +  1  -
Профиль   Отправить e-mail  

Вопрос об ООП Python

FishHook
Python - мультипарадигменный язык. Хочется вам этого или нет, но можно написать на нем программу без ООП. Вы путаете Python с Ruby. Ruby - объектно-ориентированный язык.

Отредактировано Rudium (Фев. 9, 2016 07:15:50)

Офлайн

#6 Фев. 9, 2016 07:34:00

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вопрос об ООП Python

Rudium
но можно написать на нем программу без ООП
А вы знаете, вообще много чего можно. Можно, например, ногами рулить, а руками на педали нажимать.
А можно борщ варить в сковороде, а в кастрюле картошку жарить.



Офлайн

#7 Фев. 9, 2016 07:52:50

Rudium
Зарегистрирован: 2015-12-06
Сообщения: 114
Репутация: +  1  -
Профиль   Отправить e-mail  

Вопрос об ООП Python

Сообщите это Гвидо Ван Россуму, сделавшему Python мультипарадигменным, а не объектно-ориентированным как вы считаете.

Офлайн

#8 Фев. 9, 2016 08:14:24

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вопрос об ООП Python

Rudium

a = 1
print dir(a)
Или вы считаете, что отсутствие атомарных типов и следование идеологии “всё есть объект” не делает язык объектно-ориентированным?



Офлайн

#9 Фев. 9, 2016 08:27:43

Rudium
Зарегистрирован: 2015-12-06
Сообщения: 114
Репутация: +  1  -
Профиль   Отправить e-mail  

Вопрос об ООП Python

Конечно не делает. Это делает язык объектным. Я могу написать программу которая не будет использовать наследование на Python, потому что такую возможность намеренно предусмотрел создатель языка. Моя программа будет считаться программой с использованием абстрактных типов, а для ООП обязательно наследование.

Отредактировано Rudium (Фев. 9, 2016 08:31:45)

Офлайн

#10 Фев. 9, 2016 08:30:59

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вопрос об ООП Python

Rudium
Конечно не делает. Это делает язык объектным. Я могу написать программу которая не будет использовать наследование на Python, потому такую возможность намеренно предусмотрел создатель языка.
Какую-бы программу на питоне вы не написали, хоть в один байт, эта программа будет использовать объекты, потому что в питоне ВСЁ ЕСТЬ ОБЪЕКТ, поэтому он объектно-ориентированный. Вся остальная мультипагадигменность вторична, поскольку даже функции являются объектами, даже модули и даже основополагающие типы.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version