Làm cách nào để thêm một phương thức thể hiện vào một lớp bằng cách sử dụng một metaclass (có, tôi cần phải sử dụng một metaclass)? Các loại sau đây của tác phẩm, nhưng FUNC_NAME vẫn sẽ là "foo":Làm thế nào để thêm phương thức sử dụng metaclass
def bar(self):
print "bar"
class MetaFoo(type):
def __new__(cls, name, bases, dict):
dict["foobar"] = bar
return type(name, bases, dict)
class Foo(object):
__metaclass__ = MetaFoo
>>> f = Foo()
>>> f.foobar()
bar
>>> f.foobar.func_name
'bar'
Vấn đề của tôi là một số mã thư viện thực sự sử dụng các FUNC_NAME và sau đó thất bại trong việc tìm ra phương pháp 'bar' của instance Foo. Tôi có thể làm:
dict["foobar"] = types.FunctionType(bar.func_code, {}, "foobar")
Cũng có các loại.MethodType, nhưng tôi cần một cá thể chưa tồn tại để sử dụng. Tôi có thiếu gì đó ở đây không?
Tại sao các bạn cố gắng để thay đổi tên của phương pháp này? không dict [bar.func_name] = thanh thực hiện những gì bạn muốn? –
Câu hỏi hay ... Tôi ban đầu đã tạo tên phương thức dựa trên các thuộc tính được định nghĩa trong dict, nhưng tôi nhận ra điều này là vô nghĩa nếu việc triển khai các phương thức giống hệt nhau. –