Найти - Пользователи
Полная версия: Вопрос об ООП Python
Начало » Python для новичков » Вопрос об ООП Python
1 2 3 4 5
Ethan
Суть в следующем: Раньше я имел дело только с процедурными языками, писал некоторые скрипты на процедурных языках. Недавно я столкнулся с ООП и для меня остаются непонятными многие вещи, а в частности - наследование:

Я изучаю Пайтон по книге «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')
Rudium
Какая разница, упрощает ли жизнь ООП, программистам использующим ООП? Если вам лично не упрощает (ввиду сложности понимания концепции ООП) значит не используйте его. Это не серебряная пуля, а вопрос личной приверженности и вкуса.
FishHook
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()
FishHook
Rudium
Какая разница, упрощает ли жизнь ООП, программистам использующим ООП? Если вам лично не упрощает (ввиду сложности понимания концепции ООП) значит не используйте его. Это не серебряная пуля, а вопрос личной приверженности и вкуса.
Странная позиция. Питон - объектно-ориентированный язык, хочется вам этого или нет. С этим фактом придется смириться и принять. Каждый ЯП исповедует какую-то свою идеологию, и вы либо принимаете её и используете предоставленные возможности либо ищите для себя другой инструмент. Если ООП для кого-то слишком сложная концепция, то этому товарищу нужно идти подметать трамвайные пути или крутить хвосты коровам.
Rudium
FishHook
Python - мультипарадигменный язык. Хочется вам этого или нет, но можно написать на нем программу без ООП. Вы путаете Python с Ruby. Ruby - объектно-ориентированный язык.
FishHook
Rudium
но можно написать на нем программу без ООП
А вы знаете, вообще много чего можно. Можно, например, ногами рулить, а руками на педали нажимать.
А можно борщ варить в сковороде, а в кастрюле картошку жарить.

Rudium
Сообщите это Гвидо Ван Россуму, сделавшему Python мультипарадигменным, а не объектно-ориентированным как вы считаете.
FishHook
Rudium
a = 1
print dir(a)
Или вы считаете, что отсутствие атомарных типов и следование идеологии “всё есть объект” не делает язык объектно-ориентированным?
Rudium
Конечно не делает. Это делает язык объектным. Я могу написать программу которая не будет использовать наследование на Python, потому что такую возможность намеренно предусмотрел создатель языка. Моя программа будет считаться программой с использованием абстрактных типов, а для ООП обязательно наследование.
FishHook
Rudium
Конечно не делает. Это делает язык объектным. Я могу написать программу которая не будет использовать наследование на Python, потому такую возможность намеренно предусмотрел создатель языка.
Какую-бы программу на питоне вы не написали, хоть в один байт, эта программа будет использовать объекты, потому что в питоне ВСЁ ЕСТЬ ОБЪЕКТ, поэтому он объектно-ориентированный. Вся остальная мультипагадигменность вторична, поскольку даже функции являются объектами, даже модули и даже основополагающие типы.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB