ホームページ >バックエンド開発 >Python チュートリアル >Python でクラスを装飾するにはどうすればよいですか?

Python でクラスを装飾するにはどうすればよいですか?

王林
王林転載
2023-05-26 14:43:061460ブラウズ

如何在 Python 中装饰一个类?

追加の Python ステートメントを使用して古いオブジェクトを変更し、同じ参照を返します。

たとえば、__init__ と display という 2 つのメソッドがある次のクラスについて考えてみましょう。 __init__ メソッドは、出力名を表示するときに name 変数を初期化します。

class Student:
def __init__(self, name):
self.name = name
def display(self):
print('Name:', self.name)

Python でこのクラスを装飾するには、クラスに新しいメソッドを追加するか、既存のメソッドを変更するか、あるいはその両方を行うことができます。

また、Python でこれを行うには、関数デコレータまたはクラス デコレータを使用する 2 つの方法があります。

例を 1 つずつ見てみましょう。

関数デコレータを使用したクラスの装飾

関数デコレータを使用してクラスを装飾するには、クラスをパラメータとして受け入れ、そのコードを変更してクラスを返します。終わり。

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が表示メソッドとしてクラスに追加されます。

  • クラスへの参照はデコレーター関数で使用できるため、既存のメソッドを変更するだけでなく、クラスに新しいプロパティやメソッドを追加することもできます

クラス デコレータを使用したクラスの装飾

##クラス デコレータを使用してクラスを装飾するには、__call__ で (デコレータの __init__ メソッドの) パラメータとしてクラスへの参照を受け入れます。メソッド内のコードを変更し、最後に変更されたクラスのインスタンスを返します。

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。