# your code goes here#coding: utf-8
"""
Типы строя
"""
class Culture:
"""
Культура
"""
def __repr__(self):
return self.__str__()
class Democracy(Culture):
def __str__(self):
return 'Democracy'
class Dictatorship(Culture):
def __str__(self):
return 'Dictatorship'
"""
Само правительство
"""
class Government:
culture = ''
def __str__(self):
return self.culture.__str__()
def __repr__(self):
return self.culture.__repr__()
def set_culture(self):
"""
Задать строй правительству : это и есть наш Фабричный Метод
"""
raise AttributeError('Not Implemented Culture')
"""
Правительство 1
"""
class GovernmentA(Government):
def set_culture(self):
self.culture = Democracy()
"""
Правительство 2
"""
class GovernmentB(Government):
def set_culture(self):
self.culture = Dictatorship()
g1 = GovernmentA()
g1.set_culture()
print (str(g1))
g2 = GovernmentB()
g2.set_culture()
print (str(g2))
IyB5b3VyIGNvZGUgZ29lcyBoZXJlI2NvZGluZzogdXRmLTgKIiIiCtCi0LjQv9GLINGB0YLRgNC+0Y8KIiIiCmNsYXNzIEN1bHR1cmU6CiAgICAiIiIKICAgINCa0YPQu9GM0YLRg9GA0LAKICAgICIiIgogICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLl9fc3RyX18oKQoKY2xhc3MgRGVtb2NyYWN5KEN1bHR1cmUpOgogICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgcmV0dXJuICdEZW1vY3JhY3knCgpjbGFzcyBEaWN0YXRvcnNoaXAoQ3VsdHVyZSk6CiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICByZXR1cm4gJ0RpY3RhdG9yc2hpcCcKCiIiIgrQodCw0LzQviDQv9GA0LDQstC40YLQtdC70YzRgdGC0LLQvgoiIiIKY2xhc3MgR292ZXJubWVudDoKICAgIGN1bHR1cmUgPSAnJwogICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuY3VsdHVyZS5fX3N0cl9fKCkKCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuY3VsdHVyZS5fX3JlcHJfXygpCgogICAgZGVmIHNldF9jdWx0dXJlKHNlbGYpOgogICAgICAgICIiIgogICAgICAgINCX0LDQtNCw0YLRjCDRgdGC0YDQvtC5INC/0YDQsNCy0LjRgtC10LvRjNGB0YLQstGDIDog0Y3RgtC+INC4INC10YHRgtGMINC90LDRiCDQpNCw0LHRgNC40YfQvdGL0Lkg0JzQtdGC0L7QtAogICAgICAgICIiIgogICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCdOb3QgSW1wbGVtZW50ZWQgQ3VsdHVyZScpCgoiIiIK0J/RgNCw0LLQuNGC0LXQu9GM0YHRgtCy0L4gMQoiIiIKY2xhc3MgR292ZXJubWVudEEoR292ZXJubWVudCk6CiAgICBkZWYgc2V0X2N1bHR1cmUoc2VsZik6CiAgICAgICAgc2VsZi5jdWx0dXJlID0gRGVtb2NyYWN5KCkKCiIiIgrQn9GA0LDQstC40YLQtdC70YzRgdGC0LLQviAyCiIiIgpjbGFzcyBHb3Zlcm5tZW50QihHb3Zlcm5tZW50KToKICAgIGRlZiBzZXRfY3VsdHVyZShzZWxmKToKICAgICAgICBzZWxmLmN1bHR1cmUgPSBEaWN0YXRvcnNoaXAoKQoKZzEgPSBHb3Zlcm5tZW50QSgpCmcxLnNldF9jdWx0dXJlKCkKcHJpbnQgKHN0cihnMSkpCgpnMiA9IEdvdmVybm1lbnRCKCkKZzIuc2V0X2N1bHR1cmUoKQpwcmludCAoc3RyKGcyKSk=