class Person:
def __init__(self, n, s):
self.name = n
self.surname = s
p1 = Person("Sam", "Baker")
print(p1.name, p1.surname)
class Person:
def __init__(self, n, s):
self.__name = n
self.surname = s
@property
def name(self):
return self.__name
@name.setter
def name(self, new_name):
self.__name = new_name
def printy(self):
print(self.__name, self.surname)
p1 = Person("Sam", "Baker")
p1.name = "loh"
p1.printy()
class Cat():
def __init__(self, breed, color, age):
self._breed = breed
self._color = color
self._age = age
@property
def breed(self):
return self._breed
@property
def color(self):
return self._color
@property
def age(self):
return self._age
@age.setter
def age(self, new_age):
if new_age > self._age:
self._age = new_age
return self._age
cat = Cat('Абиссинская', 'Рыжая', 4)
print(cat.breed) # Абиссинская
print(cat.color) # Рыжая
print(cat.age)
cat.age = 5
print(cat.age)
class Person:
def __init__(self, name, hp, damage, armor):
self.name = name
self.hp = hp
self.damage = damage
self.armor = armor
def run(self):
print(f'{self.name} бежит')
def attack(self, target):
target_damage = self.damage - target.armor
if target_damage > 0:
target.hp -= target_damage
print(f'{self.name} наносит {target_damage} урона {target.name}')
else:
print(f'{self.name} не пробивает броню {target.name}')
'''target объект класса Person, который использует в себе другие объекты класса Person'''
elf = Person('Эльф', 100, 20, 10)
ork = Person("Орк", 100, 30, 10)
elf.run()
'''В def run(self) в качестве self подставляется elf'''
ork.attack(elf)
'''в def attack(self, target) в качестве self подставляется ork (он инициатор метода), а в качестве target elf'''
'''Теперь понадобилось добавить новый персонаж, который старые навыки + новый летать (Dragon)
При его создании используем принцип НАСЛЕДОВАНИЯ'''
class Dragon(Person):
def fly(self):
print(f'Дракон {self.name} летит')
def attack(self, target): # это метод добавлен позже. см комент с тремя ***
print('Дракон атакует')
gorynych = Dragon("Горыныч", 200, 40, 30)
gorynych.attack(ork)
'''Вводим еще один персонаж Ведьму, которая колдует и летает, но не так как дракон'''
class Witch(Person):
def witchcraft(self):
print(f'Ведьма {self.name} колдует!')
def fly(self):
print(f'Ведьма {self.name} летит на метле')
baba_yaga = Witch('Баба Яга', 100, 20, 10)
baba_yaga.witchcraft()
gorynych.attack(gorynych)
baba_yaga.fly()
'''Игра развивается и решено ввести персонаж вельма + дракон (множественное наследование)'''
class DragonWitch(Dragon, Witch):
def hwo_i_am(self):
print('Что я такое')
chudo_yudo = DragonWitch("Чудо-Юдо", 200, 40, 30)
chudo_yudo.attack(ork)
chudo_yudo.witchcraft()
chudo_yudo.run()
chudo_yudo.fly()
''' ведьма и дракон умеют летать, но так как в списке наследования (class DragonWitch(Dragon, Witch)) дракон
стоит на первом месте, то чудо юдо будет наследовать схожие фенкции в первую очередь от него
т.е. он ищет функции сначала у себя, потом у дракона, потом у ведьмы, потом у персон'''
'''*** ПОЛИФОРМИЗМ - Позволяем одному и томуже методу работать по разному в зависимости от объекта, который
его вызывает.
Сделаем атаку Дракона отличной от других, теперь атака Дракона и Чудо-Юда будет другой'''
ork.attack(elf)
chudo_yudo.attack(ork)
'''из общих методов можно сделать единый интерфейс, например у всех наших персонажей есть метод run
можно из них создать, список армия, перебрать его и заставить всех бежать, если потом мы у одного из персонажей
мы перепишем эту функцию, то ни чего не сломается, просто он будет бежать по-другому.'''
army = [elf, ork, baba_yaga, chudo_yudo, gorynych]
for unit in army:
unit.run()
class Cat:
def __init__(self, name, age, breed, color, weight):
self.name = name
self.age = age
self.breed = breed
self.color = color
self.weight = weight
def say_meow(self):
print(self.name, 'мяукает')
def info(self):
print('Имя:', self.name, 'Порода:', self.breed, 'Возраст:', self.age, 'Окрас:', self.color, 'Вес:', self.weight)
def hunting(self):
print(self.name, 'охотиться')
def years(self):
if self.age < 10:
print(self.name, '- Молодая кошка/кот')
else:
print(self.name, '- Зрелая кошка/кот')
def scales(self):
if self.weight <= 3:
print(self.name, 'с весом', str(self.weight) + 'кг', 'ниже нормы')
elif self.weight < 5:
print(self.name, 'с весом', str(self.weight) + 'кг', 'в норме')
else:
print(self.name, 'с весом', str(self.weight) + 'кг', 'выше нормы')
gabi = Cat('Габриэль', 10, 'абиссинец', 'соррель', 3)
koshka = Cat('Кошка', 5, 'беспародная', 'серый', 4)
bars = Cat('Барс', 7, 'беспародная', 'серый', 5)
gabi.info()
koshka.info()
bars.info()
gabi.say_meow()
koshka.hunting()
bars.hunting()
gabi.years()
koshka.years()
bars.years()
gabi.scales()
koshka.scales()
bars.scales()
class Employee:
def __init__(self, name, age, position, experience, family):
self.name = name
self.age = age
self.position = position
self.experience = experience
self.family = family
def info(self):
print('Имя:', self.name + ".", 'Возраст:', str(self.age) + ".", 'Должность:', self.position + ".",
'Стаж:', str(self.experience) + ".", 'Семейное положение:', self.family + ".")
emp1 = Employee('Иван', 30, 'разработчик', 3, 'женат')
emp2 = Employee('Вика', 24, 'тестировщик', 2, 'замужем')
emp3 = Employee('Маша', 22, 'тестировщик', 2, 'не замужем')
emp4 = Employee('Андрей', 37, 'руководитель', 2, 'женат')
emp5 = Employee('Миша', 27, 'дизайнер', 2, 'холост')
emp1.info()
emp2.info()
emp3.info()
emp4.info()
emp5.info()
class Calculator:
def __init__(self, num1, num2):
self.n1 = num1
self.n2 = num2
def addition(self):
print(self.n1 + self.n2)
def subtraction(self):
print(self.n1 - self.n2)
def multiplication(self):
print(self.n1 * self.n2)
def division(self):
if self.n2 == 0:
print('Запомните друзья - на НОЛЬ делить нельзя')
else:
print(self.n1 / self.n2)
def exponentiation(self):
print(self.n1 ** self.n2)
example1 = Calculator(5, 2)
example2 = Calculator(15, 20)
example3 = Calculator(9, 9)
example4 = Calculator(3, 0)
example5 = Calculator(100, 20)
example6 = Calculator(9, 3)
example1.addition()
example2.subtraction()
example3.multiplication()
example4.division()
example5.division()
example6.exponentiation()