-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpanthera.py
132 lines (112 loc) · 3.05 KB
/
panthera.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
from helper import CannotBreed
from helper import copulate
from helper import Gender
from helper import get_new_generation
from helper import get_parent
from helper import random
class InitMixin:
def __init__(self, gender=Gender.random()):
"""
Args:
gender (Gender, optional): If you want to set the gender manually.
Defaults to Gender.random().
"""
super().__init__(self.base_name[gender], gender, 1)
class Panthera:
"""
Panthera Base Class
"""
def __init__(self, name, gender, generation, sire=None, dam=None):
"""
Args:
name (String): Name of the panthera
gender (Gender): Gender
generation (int): generation
sire (Panthera, optional): Male Parent. Defaults to None.
dam (Panthera, optional): Female Parent. Defaults to None.
"""
self.name = name
self.gender = gender
self.generation = generation
self.sire = sire
self.dam = dam
def __repr__(self) -> str:
"""
For print purpose
"""
return self.__str__()
def __str__(self) -> str:
"""
For print purpose
"""
return self.name
def __lt__(self, other):
"""
For sorting purposes
"""
if self.generation == other.generation:
return self.name < other.name
else:
return self.generation < other.generation
def __gt__(self, other):
"""
For sorting purposes
"""
if self.generation == other.generation:
return self.name > other.name
else:
return self.generation > other.generation
def __add__(self, other):
"""
Breeds two panthera instance
"""
if self.gender == other.gender:
raise CannotBreed
[sire, dam] = get_parent(self, other)
[new_name, new_gender] = copulate(sire, dam)
new_generation = get_new_generation(self, other)
return Panthera(
new_name,
new_gender,
new_generation,
sire,
dam
)
def random_first_gen():
"""
Returns:
Panthera: a subclass of panthera
"""
return random.choice([Tiger, Lion, Jaguar, Leopard])
class Tiger(InitMixin, Panthera):
"""
1st generation Tiger with random gender.
"""
base_name = {
Gender.FEMALE: "Tigress",
Gender.MALE: "Tiger",
}
class Lion(InitMixin, Panthera):
"""
1st generation Lion with random gender.
"""
base_name = {
Gender.FEMALE: "Lioness",
Gender.MALE: "Lion",
}
class Jaguar(InitMixin, Panthera):
"""
1st generation Jaguar with random gender.
"""
base_name = {
Gender.FEMALE: "Jaguaress",
Gender.MALE: "Jaguar",
}
class Leopard(InitMixin, Panthera):
"""
1st generation Leopard with random gender.
"""
base_name = {
Gender.FEMALE: "Leopardess",
Gender.MALE: "Leopard",
}