forked from tuvo1106/python_design_patterns
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuilder_facets.py
More file actions
79 lines (61 loc) · 1.79 KB
/
builder_facets.py
File metadata and controls
79 lines (61 loc) · 1.79 KB
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
class Person:
def __init__(self):
# address
self.street_address = None
self.postcode = None
self.city = None
# employment
self.company_name = None
self.position = None
self.annual_income = None
def __str__(self):
return f'Add: {self.street_address}, {self.postcode}, {self.city}' +\
f'\nEmployed at {self.company_name} as a {self.position} earning \
{self.annual_income}'
class PersonBuilder:
def __init__(self, person=Person()):
self.person = person
@property
def works(self):
return PersonJobBuilder(self.person)
@property
def lives(self):
return PersonAddressBuilder(self.person)
def build(self):
return self.person
class PersonJobBuilder(PersonBuilder):
def __init__(self, person):
super().__init__(person)
def at(self, company_name):
self.person.company_name = company_name
return self
def as_a(self, position):
self.person.position = position
return self
def earning(self, annual_income):
self.person.annual_income = annual_income
return self
class PersonAddressBuilder(PersonBuilder):
def __init__(self, person):
super().__init__(person)
def at(self, street_address):
self.person.street_address = street_address
return self
def at_postcode(self, postcode):
self.person.postcode = postcode
return self
def in_city(self, city):
self.person.city = city
return self
PB = PersonBuilder()
PERSON1 = PB\
.lives\
.at('123 London Road')\
.in_city('London')\
.at_postcode('SW12BC')\
.works\
.at('Fabrikam')\
.as_a('Engineer')\
.earning(123000)\
.build()
print(PERSON1)