追加の 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が表示メソッドとしてクラスに追加されます。
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 サイトの他の関連記事を参照してください。