2012-02-25 27 views
5

Tôi sẽ thêm phương thức vào tên chức năng động class động ... cũng sẽ được truyền động.thêm phương thức vào một lớp động với trang trí

Tôi có thể làm như thế nào? Tôi cố gắng theo cách

def decor(*var): 
    def onDecorator(aClass): 
    class onInstance: 
     def __init__(self,*args,**kargs): 
      setter=var 
      aClass.setter = self.flam 
      self.wrapped = aClass(*args,**kargs) 

     def __getattr__(self,attr): 
      return getattr(self.wrapped,attr) 

     def __setattr__(self,attr,value): 
      if attr == 'wrapped': 
       self.__dict__[attr]=value 
      else: 
       setattr(self.wrapped,attr,value) 

     def flam(self,*args): 
      self.__setattr__('dimension',len(args[0])) 

    return onInstance 
return onDecorator 

này nhưng nếu tôi làm:

print(aClass.__dict__) 

tôi có

'setter': <bound method onInstance.flam of <__main__.onInstance object at 0x522270>> 

thay vì var: .....

tôi có lớp học này :

class D: 
    def __init__(self, data): 
    self.data = data 
    self.dimension = len(self.data) 

tôi sẽ gọi:

D.name() 

và có trở lại self.dimension nhưng tôi không biết name trước

+7

Hiện một ví dụ về mã mà bạn hy vọng sẽ sử dụng để đính kèm phương pháp này đến lớp. Tôi không có ý tưởng làm thế nào bạn có thể có một phương pháp mà bạn muốn đính kèm, nhưng không có bất kỳ loại tên cho nó. Tôi cũng không có ý tưởng làm thế nào bạn mong đợi phương pháp để làm cho bất kỳ ý nghĩa để được gắn vào lớp, nếu lớp học không được thiết kế với phương pháp đó ở nơi đầu tiên. –

+0

đã cập nhật mô tả – fege

Trả lời

6

Đây là trang trí của tôi

def decorator(name): 
    def wrapper(K): 
     setattr(K, name, eval(name)) 
     return K 
    return wrapper 

Đây là một phương pháp mẫu

def myfunc(self): 
    print "Istance class: ", self 

Đây là một lớp decoreted

@decorator("myfunc") 
class Klass: 
    pass 

Tôi hy vọng điều này rất hữu ích và những gì bạn cần :)

Các vấn đề liên quan