จากประสบการณ์ของฉันรูปแบบบางอย่างยังคงมีประโยชน์ใน Python และตั้งค่าได้ง่ายกว่าภาษาแบบคงที่มากกว่า OTOH บางรูปแบบไม่จำเป็นหรือแม้แต่ขมวดคิ้วเช่นเดียวกับรูปแบบซิงเกิล ใช้ตัวแปรหรือฟังก์ชั่นระดับโมดูลแทน หรือใช้รูปแบบ Borg
แทนที่จะตั้งค่ารูปแบบการสร้างมันมักจะเพียงพอที่จะผ่าน callable ที่สร้างวัตถุ นั่นอาจเป็นฟังก์ชั่นวัตถุที่มี__call__
เมธอดหรือแม้แต่คลาสเนื่องจากไม่มีnew()
ใน Python เพียงแค่เรียกใช้คลาสเอง:
def make_da_thing(maker, other, stuff):
da_thing = maker(other + 1, stuff + 2)
# ... do sth
return da_thing
def maker_func(x, y):
return x * y
class MakerClass(object):
def __init__(self, x, y):
self.x = x
self.y = y
...
a = make_da_thing(maker_func, 5, 8)
b = make_da_thing(MakerClass, 6, 7)
รูปแบบสถานะและกลยุทธ์ใช้โครงสร้างที่คล้ายกันมากในภาษาเช่น C ++ และ Java น้อยกว่าดังนั้นใน Python รูปแบบกลยุทธ์ยังคงเหมือนเดิมไม่มากก็น้อย แต่รูปแบบของรัฐก็ไม่จำเป็น รูปแบบสถานะในภาษาแบบคงที่จำลองการเปลี่ยนแปลงของคลาสที่รันไทม์ ใน Python คุณสามารถทำได้ดังนี้เปลี่ยน class ของ object ที่ runtime ตราบใดที่คุณทำมันในแบบที่ควบคุมได้คุณควรจะทำได้:
class On(object):
is_on = True
def switch(self):
self.__class__ = Off
class Off(object):
is_on = False
def switch(self):
self.__class__ = On
...
my_switch = On()
assert my_switch.is_on
my_switch.switch()
assert not my_switch.is_on
รูปแบบที่ใช้ Static Type Dispatch จะไม่ทำงานหรือทำงานแตกต่างกันมาก คุณไม่จำเป็นต้องเขียนรหัสแผ่นบอยเลอร์มากนักเช่นรูปแบบผู้เข้าชม: ใน Java และ C ++ คุณต้องเขียนวิธีการยอมรับในทุกคลาสที่เยี่ยมชมได้ในขณะที่ใน Python คุณสามารถสืบทอดการทำงานนั้นผ่านคลาส Mixin เช่น Visitable:
class Visitable(object):
def accept(self, visitor):
visit = getattr(visitor, 'visit' + self.__class__.__name__)
return visit(self)
...
class On(Visitable):
''' exactly like above '''
class Off(Visitable):
''' exactly like above '''
class SwitchStatePrinter(object): # Visitor
def visitOn(self, switch):
print 'the switch is on'
def visitOff(self, switch):
print 'the switch is off'
class SwitchAllOff(object): # Visitor
def visitOn(self, switch):
switch.switch()
def visitOff(self, switch):
pass
...
print_state = SwitchStatePrinter()
turn_em_off = SwitchAllOff()
for each in my_switches:
each.accept(print_state)
each.accept(turn_em_off)
หลาย ๆ สถานการณ์ที่เรียกใช้แอปพลิเคชันของรูปแบบในภาษาแบบคงที่ไม่ได้ทำใน Python มากนัก หลายสิ่งสามารถแก้ไขได้ด้วยเทคนิคอื่น ๆ เช่นฟังก์ชั่นการสั่งซื้อที่สูงขึ้น (มัณฑนากรโรงงานทำงาน) หรือคลาสเมตา