>  기사  >  백엔드 개발  >  Python으로 수업을 장식하는 방법은 무엇입니까?

Python으로 수업을 장식하는 방법은 무엇입니까?

王林
王林앞으로
2023-05-26 14:43:061426검색

如何在 Python 中装饰一个类?

추가 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제