คำถามติดแท็ก decorator

มัณฑนากรคือรูปแบบการออกแบบเชิงวัตถุที่ช่วยเพิ่มพฤติกรรมให้กับคลาสที่มีอยู่ในรูปแบบไดนามิก เป็นหนึ่งในรูปแบบการออกแบบโครงสร้างของ Gang of Four

17
วิธีที่จะทำให้ห่วงโซ่ของนักตกแต่งฟังก์ชั่นหรือไม่?
ฉันจะสร้างสองนักตกแต่งใน Python ที่จะทำสิ่งต่อไปนี้ได้อย่างไร? @makebold @makeitalic def say(): return "Hello" ... ซึ่งควรกลับมา: "<b><i>Hello</i></b>" ฉันไม่ได้พยายามทำHTMLสิ่งนี้ในแอปพลิเคชันจริง - เพียงแค่พยายามเข้าใจว่านักตกแต่งและนักตกแต่งภายในทำงานอย่างไร

14
มัณฑนากร @property ทำงานอย่างไร
ฉันต้องการที่จะเข้าใจว่าฟังก์ชั่นในตัวทำงานpropertyอย่างไร สิ่งที่ทำให้ฉันสับสนคือpropertyสามารถใช้เป็นมัณฑนากรได้ แต่ใช้อาร์กิวเมนต์เมื่อใช้เป็นฟังก์ชันในตัวเท่านั้นไม่ใช่เมื่อใช้เป็นมัณฑนากร ตัวอย่างนี้มาจากเอกสาร : class C(object): def __init__(self): self._x = None def getx(self): return self._x def setx(self, value): self._x = value def delx(self): del self._x x = property(getx, setx, delx, "I'm the 'x' property.") propertyข้อโต้แย้งของมีgetx, setx, delxและสตริง doc ในรหัสด้านล่างpropertyใช้เป็นมัณฑนากร วัตถุของมันคือxฟังก์ชั่น แต่ในรหัสข้างต้นไม่มีสถานที่สำหรับฟังก์ชั่นวัตถุในการขัดแย้ง class C(object): def __init__(self): self._x = None @property …

22
สร้างซิงเกิลตันใน Python
คำถามนี้ไม่ได้มีไว้สำหรับการอภิปรายว่ารูปแบบการออกแบบซิงเกิลตันนั้นน่าพึงพอใจหรือไม่นั้นเป็นรูปแบบการต่อต้านหรือสงครามทางศาสนาใด ๆ แต่เพื่อพูดคุยว่ารูปแบบการใช้งานที่ดีที่สุดในไพ ธ อนนั้นเป็นไปได้อย่างไร ในกรณีนี้ฉันกำหนด 'pythonic ส่วนใหญ่จะหมายถึงว่ามันเป็นไปตามหลักการน้อยมหัศจรรย์' ฉันมีหลายชั้นเรียนซึ่งจะกลายเป็น singletons (กรณีใช้งานของฉันสำหรับคนตัดไม้ แต่นี่ไม่ใช่สิ่งสำคัญ) ฉันไม่ต้องการที่จะถ่วงเวลาเรียนหลายครั้งพร้อมกับเพิ่มชัยชนะเมื่อฉันสามารถสืบทอดหรือตกแต่ง วิธีการที่ดีที่สุด: วิธีที่ 1: มัณฑนากร def singleton(class_): instances = {} def getinstance(*args, **kwargs): if class_ not in instances: instances[class_] = class_(*args, **kwargs) return instances[class_] return getinstance @singleton class MyClass(BaseClass): pass ข้อดี มัณฑนากรเป็นสารเติมแต่งในลักษณะที่มักใช้งานง่ายกว่าการสืบทอดหลายแบบ จุดด้อย ในขณะที่วัตถุที่สร้างขึ้นโดยใช้ MyClass () จะเป็นวัตถุซิงเกิลจริง MyClass …

6
functools.wraps ทำอะไร
ในความคิดเห็นเกี่ยวกับคำตอบของคำถามนี้มีคนพูดว่าพวกเขาไม่แน่ใจว่าfunctools.wrapsกำลังทำอะไรอยู่ ดังนั้นฉันถามคำถามนี้เพื่อให้มีการบันทึกไว้ใน StackOverflow สำหรับการอ้างอิงในอนาคต: สิ่งที่จะfunctools.wrapsทำอย่างไร

13
พร็อกซีมัณฑนากรอะแดปเตอร์และรูปแบบบริดจ์แตกต่างกันอย่างไร
ฉันกำลังดูรูปแบบพร็อกซีและสำหรับฉันดูเหมือนว่ามันช่างน่ากลัวอย่างมัณฑนากรอะแดปเตอร์และรูปแบบบริดจ์ ฉันเข้าใจอะไรผิดไปหรือเปล่า? ความแตกต่างคืออะไร? ทำไมฉันถึงใช้รูปแบบหนังสือมอบฉันทะกับคนอื่น ๆ ? คุณเคยใช้มันในอดีตในโครงการโลกแห่งความเป็นจริงได้อย่างไร?

13
ตกแต่งด้วยพารามิเตอร์?
ฉันมีปัญหากับการถ่ายโอนตัวแปร 'insurance_mode' โดยมัณฑนากร ฉันจะทำมันโดยคำสั่งมัณฑนากรต่อไปนี้: @execute_complete_reservation(True) def test_booking_gta_object(self): self.test_select_gta_object() แต่น่าเสียดายที่ข้อความนี้ใช้ไม่ได้ บางทีอาจจะมีวิธีที่ดีกว่าในการแก้ปัญหานี้ def execute_complete_reservation(test_case,insurance_mode): def inner_function(self,*args,**kwargs): self.test_create_qsf_query() test_case(self,*args,**kwargs) self.test_select_room_option() if insurance_mode: self.test_accept_insurance_crosseling() else: self.test_decline_insurance_crosseling() self.test_configure_pax_details() self.test_configure_payer_details return inner_function
401 python  decorator 

13
อะไรคือการใช้งานทั่วไปสำหรับผู้ตกแต่ง Python [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน6 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ในขณะที่ฉันชอบคิดว่าตัวเองเป็น coder Python ที่มีความสามารถพอสมควร แต่อีกด้านหนึ่งของภาษาที่ฉันไม่เคยคิดเลยก็คือนักตกแต่ง ฉันรู้ว่าพวกเขาคืออะไร (เผินๆ) ฉันได้อ่านบทช่วยสอนตัวอย่างคำถามเกี่ยวกับ Stack Overflow และฉันเข้าใจไวยากรณ์สามารถเขียนของตัวเองได้บางครั้งใช้ @classmethod และ @staticmethod แต่ฉันไม่เคยใช้ มัณฑนากรเพื่อแก้ปัญหาในรหัส Python ของฉันเอง ฉันไม่เคยเจอปัญหาที่ฉันคิดว่า "อืม ... นี่มันดูเหมือนงานสำหรับมัณฑนากร!" ดังนั้นฉันจึงสงสัยว่าพวกคุณจะเสนอตัวอย่างที่คุณใช้ตกแต่งภายในในโปรแกรมของคุณเองหรือไม่และหวังว่าฉันจะมี "A-ha!" ช่วงเวลาและรับพวกเขา
337 python  decorator 

28
คำเตือนมัณฑนากรตกแต่งภายในในการรวบรวม TypeScript
ฉันได้รับคำเตือน ... การสนับสนุนการทดลองสำหรับนักตกแต่งเป็นคุณสมบัติที่อาจมีการเปลี่ยนแปลงในรุ่นอนาคต ตั้งค่าตัวเลือก 'TrialDecorators' เพื่อลบคำเตือนนี้ ... แม้ว่าคอมไพเลอร์ตัวเลือกของฉันใน tsconfig.json มีการตั้งค่าต่อไปนี้: "emitDecoratorMetadata": true, "experimentalDecorators": true, สิ่งที่แปลกคือบางชั้นเรียนแบบสุ่มที่ใช้มัณฑนากรไม่แสดงคำเตือน แต่ส่วนที่เหลือในโครงการเดียวกันทำ สิ่งที่อาจทำให้เกิดพฤติกรรมดังกล่าวในคอมไพเลอร์ TypeScript?

15
จะรับชื่อพารามิเตอร์วิธีได้อย่างไร
รับฟังก์ชั่น Python: def a_method(arg1, arg2): pass ฉันจะแยกจำนวนและชื่อของอาร์กิวเมนต์ได้อย่างไร คือให้ที่ฉันมีการอ้างอิงถึงfuncผมต้องการที่จะกลับมาfunc.[something]("arg1", "arg2") สถานการณ์การใช้งานสำหรับสิ่งนี้คือฉันมีมัณฑนากรและฉันต้องการใช้อาร์กิวเมนต์เมธอดตามลำดับเดียวกับที่ปรากฏสำหรับฟังก์ชันจริงเป็นคีย์ คือมัณฑนากรจะพิมพ์ออกมา"a,b"เมื่อฉันโทรได้a_method("a", "b")อย่างไร

2
'@' (ที่สัญลักษณ์) ใน Redux @connect decorator คืออะไร
ฉันกำลังเรียนรู้ Redux ด้วย React และสะดุดกับรหัสนี้ ฉันไม่แน่ใจว่าเป็นเฉพาะReduxหรือไม่ แต่ฉันได้เห็นข้อมูลโค้ดต่อไปนี้ในหนึ่งในตัวอย่าง @connect((state) => { return { key: state.a.b }; }) ในขณะที่การทำงานของconnectตรงไปตรงสวย แต่ฉันไม่เข้าใจก่อน@ connectมันไม่ได้เป็นโอเปอเรเตอร์ JavaScript หากฉันไม่ผิด บางคนสามารถอธิบายได้ว่าอะไรคือสิ่งนี้และทำไมจึงใช้ ปรับปรุง: อันที่จริงแล้วมันเป็นส่วนหนึ่งreact-reduxที่ใช้เชื่อมต่อส่วนประกอบ React เข้ากับ Redux store

3
วิธีการใช้เครื่องมือตกแต่ง typescript
typescript 1.5ขณะนี้มีการตกแต่ง มีคนให้ตัวอย่างง่ายๆที่แสดงให้เห็นถึงวิธีการที่เหมาะสมในการใช้งานมัณฑนากรและอธิบายว่าข้อโต้แย้งในลายเซ็นมัณฑนากรที่ถูกต้องที่เป็นไปได้หมายถึงอะไร? declare type ClassDecorator = <TFunction extends Function>(target: TFunction) => TFunction | void; declare type PropertyDecorator = (target: Object, propertyKey: string | symbol) => void; declare type MethodDecorator = <T>(target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T> | void; declare type ParameterDecorator = (target: Function, propertyKey: …

14
ทำความเข้าใจกับ“ รูปแบบมัณฑนากร” ด้วยตัวอย่างจริงของโลก
ผมได้รับการศึกษาแบบมัณฑนากรเป็นเอกสารในการขาด โปรดช่วยผมเข้าใจแบบมัณฑนากร ใครช่วยยกตัวอย่างการใช้กรณีที่มีประโยชน์ในโลกแห่งความจริง?

5
การเรียกคลาสคงที่วิธีการภายในร่างกายของชั้นเรียน?
เมื่อฉันพยายามที่จะใช้วิธีการคงที่จากภายในร่างกายของชั้นเรียนและกำหนดวิธีการคงที่โดยใช้staticmethodฟังก์ชั่นในตัวเป็นมัณฑนากรเช่นนี้: class Klass(object): @staticmethod # use as decorator def _stat_func(): return 42 _ANS = _stat_func() # call the staticmethod def method(self): ret = Klass._stat_func() + Klass._ANS return ret ฉันได้รับข้อผิดพลาดต่อไปนี้: Traceback (most recent call last):<br> File "call_staticmethod.py", line 1, in <module> class Klass(object): File "call_staticmethod.py", line 7, in Klass _ANS = …

16
มีมัณฑนากรเพียงแค่แคชคืนค่าฟังก์ชันหรือไม่
พิจารณาสิ่งต่อไปนี้: @property def name(self): if not hasattr(self, '_name'): # expensive calculation self._name = 1 + 1 return self._name ฉันใหม่ แต่ฉันคิดว่าการแคชสามารถนำปัจจัยออกมาเป็นมัณฑนากรได้ มีเพียงฉันที่ไม่พบสิ่งที่ต้องการ) ป.ล. การคำนวณที่แท้จริงไม่ได้ขึ้นอยู่กับค่าที่ไม่แน่นอน

4
ทำไม @ foo.setter ใน Python ไม่ทำงานสำหรับฉัน
ดังนั้นฉันเล่นกับมัณฑนากรใน Python 2.6 และฉันมีปัญหาในการทำให้พวกเขาทำงาน นี่คือไฟล์คลาสของฉัน: class testDec: @property def x(self): print 'called getter' return self._x @x.setter def x(self, value): print 'called setter' self._x = value สิ่งที่ฉันคิดว่านี่หมายถึงการปฏิบัติต่อxทรัพย์สิน แต่เรียกใช้ฟังก์ชันเหล่านี้เพื่อรับและตั้งค่า ดังนั้นฉันเลย IDLE และตรวจสอบ: >>> from testDec import testDec from testDec import testDec >>> t = testDec() t = testDec() >>> t.x t.x called …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.