Skip to content

Commit 9b5872b

Browse files
committed
Add open lesson base OOP 11.06.2020
1 parent 073cf42 commit 9b5872b

5 files changed

Lines changed: 248 additions & 0 deletions

File tree

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
11
# Base Python
2+
3+
### Открытые уроки:
4+
- [Основы ООП от 11.06.2020](open-lessons/oop.base.11.06.2020/)
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
class A:
2+
def a(self):
3+
return "A"
4+
5+
6+
class B:
7+
def b(self):
8+
return "B"
9+
10+
11+
class C:
12+
def c(self):
13+
return "C"
14+
15+
16+
class MyMixin():
17+
def __init__(self):
18+
self.__value = 40
19+
self.__value_square = 0
20+
self.update_square()
21+
22+
def update_square(self):
23+
self.__value_square = self.value ** 2
24+
25+
@property
26+
def value_square(self):
27+
return self.__value_square
28+
29+
@property
30+
def value(self):
31+
return self.__value
32+
33+
@value.setter
34+
def value(self, v):
35+
if v < 0:
36+
raise Exception("Value has to be 0 or greater")
37+
self.__value = v
38+
self.update_square()
39+
40+
41+
class MyClass(A, B, C, MyMixin):
42+
def method(self):
43+
return " ".join((self.a(), self.b(), self.c()))
44+
45+
46+
if __name__ == '__main__':
47+
print(MyClass.__mro__)
48+
my_cls = MyClass()
49+
print(my_cls.method())
50+
51+
print("value", my_cls.value)
52+
print("square", my_cls.value_square)
53+
print("set value to 30")
54+
my_cls.value = 30
55+
print("now value", my_cls.value)
56+
print("now value square", my_cls.value_square)
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
class Person:
2+
WHAT_TO_SAY_PERSON = "My name is {name} and I'm {age} years old"
3+
4+
def __init__(self, name: str, age: int):
5+
self.name = name
6+
self.age = age
7+
8+
def say(self):
9+
speech = self.WHAT_TO_SAY_PERSON.format(name=self.name, age=self.age)
10+
print(speech)
11+
return speech
12+
13+
14+
class Employee(Person):
15+
WHAT_TO_SAY_EMPLOYEE = "I work {years} years already and get {salary} annually"
16+
17+
def __init__(self, name: str, age: int, salary: int, experience: int):
18+
super().__init__(name, age)
19+
self.salary = salary
20+
self.experience = experience
21+
22+
def say(self):
23+
initial_speech = super().say()
24+
speech = "\n".join((
25+
initial_speech,
26+
self.WHAT_TO_SAY_EMPLOYEE.format(years=self.experience, salary=self.salary)
27+
))
28+
print(speech)
29+
return speech
30+
31+
32+
if __name__ == '__main__':
33+
employee = Employee("John", 30, 100_000, 7)
34+
employee.say()
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
class BaseShape:
2+
def area(self):
3+
raise NotImplementedError
4+
5+
6+
class Rectangle(BaseShape):
7+
def __init__(self, length: int, width: int, **kwargs):
8+
self.length = length
9+
self.width = width
10+
super().__init__(**kwargs)
11+
12+
def area(self) -> int:
13+
return self.length * self.width
14+
15+
def perimeter(self) -> int:
16+
return 2 * self.length + 2 * self.width
17+
18+
19+
class Square(Rectangle):
20+
def __init__(self, length: int, **kwargs):
21+
super().__init__(length, length, **kwargs)
22+
23+
24+
class Triangle(BaseShape):
25+
def __init__(self, base: int, height: int, **kwargs):
26+
self.base = base
27+
self.height = height
28+
super().__init__(**kwargs)
29+
30+
def tri_area(self) -> float:
31+
return 0.5 * self.base * self.height
32+
33+
34+
class RightPyramid(Square, Triangle):
35+
def __init__(self, base: int, slant_height: int):
36+
super().__init__(base=base, height=slant_height, length=base)
37+
self.base = base
38+
self.slant_height = slant_height
39+
40+
def pyramid_area(self):
41+
base_area = self.area()
42+
side_area = self.tri_area()
43+
return side_area * 4 + base_area
44+
45+
46+
if __name__ == '__main__':
47+
rectangle = Rectangle(2, 4)
48+
print("Rectangle:", rectangle.length, rectangle.width)
49+
print("Area:", rectangle.area())
50+
print("Perimeter:", rectangle.perimeter())
51+
52+
square = Square(5)
53+
print("Square:", square.length)
54+
print("Area:", square.area())
55+
print("Perimeter:", square.perimeter())
56+
57+
triangle = Triangle(4, 6)
58+
print("triangle area:", triangle.tri_area())
59+
60+
pyramid = RightPyramid(10, 12)
61+
print(RightPyramid.__mro__)
62+
print("pyramid area", pyramid.pyramid_area())
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
class BaseVehicle:
2+
def make_sound(self):
3+
raise NotImplementedError
4+
5+
6+
class Car(BaseVehicle):
7+
SOUND = "beep!"
8+
CONSUMPTION = 10
9+
10+
def __init__(self, fuel: int, doors: int = 5, wheels: int = 4):
11+
"""
12+
:param fuel:
13+
:param doors:
14+
:param wheels:
15+
"""
16+
self.__fuel = fuel
17+
self.__doors = doors
18+
self.__wheels = wheels
19+
20+
def __str__(self):
21+
return f"{self.__class__.__name__}. fuel: {self.__fuel}, doors: {self.__doors}, wheels: {self.__wheels}"
22+
23+
@property
24+
def fuel(self):
25+
return self.__fuel
26+
27+
def make_sound(self):
28+
print(self.SOUND)
29+
return self.SOUND
30+
31+
def drive(self, distance: int):
32+
to_spend = self.CONSUMPTION * distance
33+
if self.__fuel < to_spend:
34+
raise Exception("Not enough fuel!")
35+
self.__fuel -= to_spend
36+
print(f"Drive {distance}, spend: {to_spend}, fuel left: {self.__fuel}")
37+
return self.__fuel
38+
39+
def add_fuel(self, amount: int):
40+
self.__fuel += amount
41+
print(f"Added {amount}, left {self.__fuel}")
42+
return self.__fuel
43+
44+
45+
class SportCar(Car):
46+
SOUND = "beep beep!!"
47+
CONSUMPTION = 30
48+
49+
def __init__(
50+
self,
51+
fuel: int,
52+
doors: int = 2,
53+
wheels: int = 4,
54+
doors_open_upwards: bool = True,
55+
):
56+
super().__init__(fuel, doors, wheels)
57+
self.doors_open_upwards = doors_open_upwards
58+
59+
60+
def drive_by_car(car: Car, distance: int):
61+
print("Going", distance, "by", car)
62+
car.drive(distance)
63+
print("fuel left", car._Car__fuel)
64+
65+
66+
if __name__ == '__main__':
67+
car = Car(1000)
68+
print("car:", car)
69+
# car._Car__fuel = 100
70+
# print("car fuel:", car.fuel)
71+
print("Drive, fuel left:", car.drive(15))
72+
print(car)
73+
print("Fuel left:", car.add_fuel(100))
74+
75+
# car.drive(30)
76+
# car.drive(30)
77+
# car.drive(30)
78+
79+
sport_car = SportCar(500)
80+
81+
print("car sound:")
82+
car.make_sound()
83+
print("sport car sound:")
84+
sport_car.make_sound()
85+
86+
sport_car.drive(10)
87+
sport_car._Car__fuel = 300
88+
sport_car.drive(10)
89+
90+
car.add_fuel(300)
91+
drive_by_car(car, 70)
92+
sport_car.add_fuel(1000)
93+
drive_by_car(sport_car, 30)

0 commit comments

Comments
 (0)