SpecialistOff.NET / Вопросы / Статьи / Фрагменты кода / Резюме / Метки / Помощь / Файлы
НазадМетки: python
To disallow direct access to the classes, you can nest the classes within the factory method, like this:
# Factory/shapefact1/NestedShapeFactory.py
import random
class Shape(object):
    types = []
def factory(type):
    class Circle(Shape):
        def draw(self): print("Circle.draw")
        def erase(self): print("Circle.erase")
    class Square(Shape):
        def draw(self): print("Square.draw")
        def erase(self): print("Square.erase")
    if type == "Circle": return Circle()
    if type == "Square": return Square()
    assert 0, "Bad shape creation: " + type
def shapeNameGen(n):
    for i in range(n):
        yield factory(random.choice(["Circle", "Square"]))
# Circle() # Not defined
for shape in shapeNameGen(7):
    shape.draw()
    shape.erase()