추가 Python 문을 사용하여 이전 개체를 수정하고 동일한 참조를 반환합니다.
예를 들어 __init__ 및 display라는 두 가지 메서드가 있는 다음 클래스를 생각해 보세요. __init__ 메소드는 출력 이름을 표시할 때 name 변수를 초기화합니다:
class Student: def __init__(self, name): self.name = name def display(self): print('Name:', self.name)
이 클래스를 Python으로 장식하려면 클래스에 새 메소드를 추가하거나 기존 메소드를 수정하거나 두 가지를 모두 수행할 수 있습니다.
또한 Python에서는 함수 데코레이터나 클래스 데코레이터를 사용하는 두 가지 방법으로 이를 수행할 수 있습니다.
예제를 하나씩 살펴보겠습니다.
함수 데코레이터를 사용하여 클래스를 장식하려면 클래스를 매개변수로 수락하고 해당 코드를 수정한 후 마지막에 클래스를 반환합니다.
def mydecorator(student): #define a new display method def newdisplay(self): print('Name: ', self.name) print('Subject: Programming') #replace the display with newdisplay student.display = newdisplay #return the modified student return student @mydecorator class Student: def __init__(self, name): self.name = name def display(self): print('Name:', self.name) obj = Student('Pencil Programmer') obj.display() ''' Name: Pencil Programmer Subject: Programming '''
클래스에 표시 메소드가 없으면 표시 메소드로 newdisplay가 클래스에 추가됩니다.
클래스 데코레이터를 사용하려면 클래스를 장식하고, 클래스에 대한 참조를 매개변수(데코레이터의 __init__ 메서드에서)로 받아들이고, __call__ 메서드에서 해당 코드를 수정하고, 마지막으로 수정된 클래스의 인스턴스를 반환합니다.
class Mydecorator: #accept the class as argument def __init__(self, student): self.student = student #accept the class's __init__ method arguments def __call__(self, name): #define a new display method def newdisplay(self): print('Name: ', self.name) print('Subject: Python') #replace display with newdisplay self.student.display = newdisplay #return the instance of the class obj = self.student(name) return obj @Mydecorator class Student: def __init__(self, name): self.name = name def display(self): print('Name: ', self.name) obj = Student('Pencil Programmer') obj.display() ''' Name: Pencil Programmer Subject: Python '''
여기서 유일한 차이점은 클래스 참조 대신 개체에 대한 참조를 반환한다는 것입니다.
원문:https://www.php.cn/link/137ffea9336f8b47a66439fc34e981ee
위 내용은 Python으로 수업을 장식하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!