成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何在 Python 中裝飾一個類?

開發 后端
在本篇中,我們將學習使用函數和類裝飾器在 Python 中裝飾一個類,Python 中的裝飾器是修改現有函數或類的任何可調用對象。

它使用額外的 Python 語句修改舊對象并返回相同的引用。

例如,考慮下面的類,它有兩個方法:__init__和 display。__init__方法在顯示輸出名稱時初始化名稱變量:

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
'''

如果類中不存在 display 方法,則 newdisplay 將作為 display 方法添加到類中。

  •  由于類的引用在裝飾器函數中是可用的,我們除了修改現有方法外,還可以為類添加新的屬性和方法

使用類裝飾器裝飾類

要使用類裝飾器裝飾類,接受類的引用作為參數(在裝飾器的__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://pencilprogrammer.com/decorate-python-class/??

責任編輯:龐桂玉 來源: python運維技術
相關推薦

2021-02-14 13:38:17

Python開發函數

2024-04-18 10:23:35

裝飾器Python

2024-04-11 08:30:05

JavaScript數組函數

2016-12-07 17:45:44

Linux文件

2022-08-14 08:29:21

npmNode

2019-09-10 09:12:54

2019-05-21 13:55:22

Python編程語言游戲

2025-04-14 08:35:00

Python類裝飾器裝飾器

2012-03-14 11:08:32

JavaJLayer

2021-11-01 12:13:53

Linux僵尸進程

2021-09-14 12:34:33

LinuxLinux終端

2017-02-10 20:00:17

Linux共享目錄命令

2021-05-28 18:12:51

C++設計

2024-11-04 15:30:43

Python裝飾器函數

2020-04-13 16:05:25

JS裝飾器前端

2022-05-10 09:12:16

TypeScript裝飾器

2011-04-01 09:49:54

Python

2021-11-15 10:35:46

Python線程代碼

2019-08-12 09:55:10

GitHub項目終端

2021-07-02 07:18:19

Goresults通道類型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产丝袜一区二区三区免费视频 | 精品国产一区二区 | 成人欧美一区二区三区在线播放 | 亚洲国产精品久久 | 日韩在线视频一区 | 欧美精品一区二区三区在线 | 欧美中文字幕一区二区 | 日韩成人性视频 | 一级欧美| 九九热这里| 国产精品国产a级 | 亚洲国产看片 | av福利网 | 久草精品视频 | 婷婷丁香在线视频 | 人人鲁人人莫人人爱精品 | 亚洲国产成人精品久久久国产成人一区 | 在线观看久草 | 日日操夜夜干 | 日韩av一区二区在线观看 | 日韩欧美一区二区三区四区 | 中文字字幕一区二区三区四区五区 | 欧美又大粗又爽又黄大片视频 | 日本视频在线播放 | 欧美在线视频一区 | 精品亚洲一区二区三区 | 欧美1—12sexvideos | 亚洲精品乱码久久久久久按摩观 | 成人在线观看免费 | 国产成人jvid在线播放 | 精品国产欧美一区二区 | 91一区二区三区 | 亚洲激情第一页 | 一区二区三区不卡视频 | 岛国av免费观看 | 欧美天天视频 | 欧美成人免费在线视频 | 亚洲高清在线 | 日韩欧美在线播放 | 国产精品久久久久久久久久三级 | 国产免费一级片 |