Tôi có một lớp học với một mẫu lặp đi lặp lại ngu si đần độn về chức năng của họ và tôi muốn biến mẫu này thành một trang trí. Nhưng vấn đề là trang trí này phải truy cập một số thuộc tính của cá thể hiện tại, vì vậy tôi muốn biến nó thành một phương thức trong lớp này. Tôi đang gặp một số vấn đề với điều đó.Phương pháp có thể là một trang trí của một phương pháp khác của cùng một lớp không?
Vì vậy, điều này cũng tương tự như những gì tôi muốn:
class DullRepetitiveClass:
def __init__(self, nicevariable):
self.nicevariable = nicevariable
def mydecorator(self, myfunction):
def call(*args, **kwargs):
print "Hi! The value of nicevariable is %s"%(self.nicevariable,)
return myfunction(*args, **kwargs)
return call
@mydecorator #Here, comment (1) below.
def somemethod(self, x):
return x + 1
(1) Dưới đây là vấn đề. Tôi muốn sử dụng phương pháp DullRepetitiveClass.mydecorator
để trang trí phương pháp somemethod
. Nhưng tôi không có ý tưởng làm thế nào để sử dụng phương pháp từ dụ hiện tại như trang trí.
Có cách nào đơn giản để thực hiện việc này không?
EDIT: Ok, câu trả lời là khá rõ ràng. Như Sven đặt nó bên dưới, trang trí tự nó chỉ biến đổi phương pháp. Bản thân phương pháp phải xử lý mọi thứ liên quan đến cá thể:
def mydecorator(method):
def call(self, *args, **kwargs):
print "Hi! The value of nicevariable is %s"%(self.nicevariable,)
return method(self, *args, **kwargs)
return call
class DullRepetitiveClass:
def __init__(self, nicevariable):
self.nicevariable = nicevariable
@mydecorator
def somemethod(self, x):
return x + 1
Vui lòng sửa lỗi thụt lề của bạn. Cũng lưu ý rằng mã của bạn không chứa bất kỳ phương thức lớp nào. –
Bạn có hỏi cách chuyển một thể hiện * khác * ngoài 'self' sang' mydecorator' vì nó trang trí 'somemethod' không? – kojiro
Rất tiếc. Sao chép từ vim và dán vào trình duyệt có thể là một nỗi đau đôi khi ... –