2017-04-13 16 views
5

Về cơ bản thay vì điều này:Có thể thay đổi người dân địa phương không?

context1.a 
context1.b() 
context2.a 
context2.b() 

Tôi muốn viết:

with context1(): 
    a 
    b() 

with context2(): 
    a 
    b() 

Lý tưởng nhất là tôi sẽ làm được điều này bằng cách chuyển ra "người dân địa phương điển" với một đối tượng với một phong tục __get__, nhưng tôi m không biết làm thế nào để làm điều đó hoặc nếu nó thậm chí có thể.

Tại sao ?: Tôi đã triển khai một loại điều phối biến vị ngữ (cho vui), nhưng tôi chỉ có thể sử dụng bằng cách đặt tên rõ ràng ngữ cảnh mỗi lần: context.a() + context.b() khó chịu để viết mọi lúc.

+5

Tôi chắc chắn nghĩ rằng bạn đang cố gắng giải quyết vấn đề theo cách khó nhất có thể. Tại sao bạn không thể chỉ cần tạo một hàm gọi các hàm này khi cần thiết? –

+0

Đây có phải là giống như 'with' của Javascript không? Đó thậm chí không phải là một ý tưởng hay trong Javascript; nó không được chấp nhận và bị cấm ở chế độ nghiêm ngặt. – user2357112

Trả lời

0

Đừng làm vậy. Chỉ vì một máy Turing có thể làm điều gì đó không có nghĩa đó là một cách hay để truyền đạt ý định của bạn cho mọi người.

Chỉ cần tuân theo cú pháp chuẩn và sau đó mã của bạn sẽ rõ ràng với các kỹ sư khác.

with context1() as c: 
     c.a 
     c.b() 
Các vấn đề liên quan