Hướng dẫn python decorator add method to class - trình trang trí python thêm phương thức vào lớp

Tôi sẽ thêm phương thức vào

print(aClass.__dict__)
3 tự động ... Tên chức năng cũng sẽ được truyền động.

Làm thế nào tôi có thể làm được? Tôi đã thử theo cách này

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

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

print(aClass.__dict__)

tôi có

'setter': >

Thay vì ________ 14: .....

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à quay lại

print(aClass.__dict__)
5 nhưng tôi không biết trước
print(aClass.__dict__)
6

Hướng dẫn python decorator add method to class - trình trang trí python thêm phương thức vào lớp

Shahjapan

Huy hiệu vàng 13K2222 gold badges70 silver badges101 bronze badges

hỏi ngày 25 tháng 2 năm 2012 lúc 11:50Feb 25, 2012 at 11:50

2

Đây là người 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 học trang trí

@decorator("myfunc")
class Klass:
    pass

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

Đã trả lời ngày 2 tháng 7 năm 2012 lúc 0:20Jul 2, 2012 at 0:20

Hướng dẫn python decorator add method to class - trình trang trí python thêm phương thức vào lớp

IcepackicePackIcepack

2502 huy hiệu bạc6 Huy hiệu đồng2 silver badges6 bronze badges

Đây là một giải pháp PY3 đơn giản hóa

class A(object):
    def a(self):
        print('a')

def add_b(cls):
    def b(self):
        print('b')

    setattr(cls, 'b', b)
    return cls

@add_b
class C(A):
    pass

C().b() # 'b'

Đã trả lời ngày 13 tháng 8 năm 2019 lúc 3:33Aug 13, 2019 at 3:33

Hướng dẫn python decorator add method to class - trình trang trí python thêm phương thức vào lớp

CityNormancitynormancitynorman

4.5402 Huy hiệu vàng35 Huy hiệu bạc38 Huy hiệu Đồng2 gold badges35 silver badges38 bronze badges

1

def add_method(cls):
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            return func(*args, **kwargs)

        setattr(cls, func.__name__, wrapper)
        return func
    return decorator

Bây giờ bạn có thể sử dụng nó như thế này:

print(aClass.__dict__)
0

Chỉ cần nhớ có tham số tự trong một hàm mà bạn muốn thêm vào một lớp.

Đã trả lời ngày 28 tháng 11 năm 2019 lúc 12:38Nov 28, 2019 at 12:38

print(aClass.__dict__)
1

Nếu bạn muốn lưu ban đầu ban đầu và thêm giá trị mới vào def initinit and add new value to def init

print(aClass.__dict__)
2

Đã trả lời ngày 11 tháng 6 năm 2019 lúc 13:31Jun 11, 2019 at 13:31

Hướng dẫn python decorator add method to class - trình trang trí python thêm phương thức vào lớp

Igor Zigor zIgor Z

5515 Huy hiệu bạc7 Huy hiệu Đồng5 silver badges7 bronze badges

Chúng ta có thể sử dụng các nhà trang trí trên lớp trong Python không?

Trang trí là một công cụ rất mạnh mẽ và hữu ích trong Python vì nó cho phép các lập trình viên sửa đổi hành vi của chức năng hoặc lớp.Các nhà trang trí cho phép chúng ta bọc một chức năng khác để mở rộng hành vi của chức năng được bọc, mà không cần sửa đổi vĩnh viễn nó.. Decorators allow us to wrap another function in order to extend the behaviour of the wrapped function, without permanently modifying it.

Một người trang trí có thể là một phương pháp lớp học?

Nhờ Python __call__ Phương pháp ma thuật, bạn có thể khai báo bất kỳ người trang trí nào là một lớp, không phải là một chức năng.you can declare any decorator as a class, not as a function.

Làm thế nào là người trang trí được sử dụng trong phương pháp lớp học?

Trong Python, bộ trang trí @ClassMethod được sử dụng để khai báo một phương thức trong lớp như một phương thức lớp có thể được gọi bằng cách sử dụng className.methodName ().Phương pháp lớp cũng có thể được gọi bằng cách sử dụng một đối tượng của lớp.@ClassMethod là một giải pháp thay thế cho hàm classMethod ().the @classmethod decorator is used to declare a method in the class as a class method that can be called using ClassName. MethodName() . The class method can also be called using an object of the class. The @classmethod is an alternative of the classmethod() function.

Tôi có thể sử dụng một bộ trang trí trên một phương pháp?

Các trình trang trí thay đổi linh hoạt chức năng của một hàm, phương pháp hoặc lớp mà không phải trực tiếp sử dụng các lớp con hoặc thay đổi mã nguồn của hàm được trang trí..