自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用 Classmethod 自定義創(chuàng)建對(duì)象的方式

開(kāi)發(fā) 前端
傳入一個(gè) name,初始化一個(gè) Pet 對(duì)象,如果你覺(jué)得這太單調(diào)了,想實(shí)現(xiàn)非常個(gè)性的初始化方法,那么可以修改 __init__ 函數(shù)的代碼。

這里分享一下 classmethod 的實(shí)用小技巧。

classmethod 是一個(gè)非常實(shí)用的裝飾器,可以用它來(lái)改變類創(chuàng)建對(duì)象的形為,比如說(shuō)這樣一段代碼:

class Pet:
def __init__(self, name):
self.name = name

傳入一個(gè) name,初始化一個(gè) Pet 對(duì)象,如果你覺(jué)得這太單調(diào)了,想實(shí)現(xiàn)非常個(gè)性的初始化方法,那么可以修改 __init__ 函數(shù)的代碼。

但是,有些情況你不能修改 __init__? 函數(shù)的代碼,比如代碼已經(jīng)運(yùn)行很久了,有很多地方調(diào)用了 Pet 的 __init__ 方法,如果直接修改,可能會(huì)產(chǎn)生很多問(wèn)題。

這時(shí)候就可以借助于裝飾器 classmethod,自定義對(duì)象的創(chuàng)建方式:

import random

class Pet:
def __init__(self, name):
self.name = name

@classmethod
def create(cls):
number = random.randint(100_000,999_999)
return cls(f"Pet_{number}")

然后,可以這樣調(diào)用,輸出結(jié)果在注釋里。

dog = Pet("Dog")
print(dog.name)
# Dog
pet = Pet.create()
print(pet.name)
# Pet_444383
print(isinstance(dog, Pet))
# True
print(isinstance(pet, Pet))
# True

此外,標(biāo)準(zhǔn)庫(kù)里也有很多使用 classmethod 的例子,比如 dict.fromkeys 就是一個(gè)例子:

>>> dict.fromkeys("ABC", 0)
{'A': 0, 'B': 0, 'C': 0}
>>> dict.fromkeys(["hello","world"])
{'hello': None, 'world': None}

責(zé)任編輯:武曉燕 來(lái)源: Python七號(hào)
相關(guān)推薦

2015-02-12 15:33:43

微信SDK

2010-10-20 16:07:48

SQL用戶自定義角色

2022-05-07 10:22:32

JavaScript自定義前端

2009-11-12 16:14:28

ADO.NET自定義對(duì)

2021-06-17 06:52:37

C#自定義異常

2013-05-02 14:08:18

2022-04-14 06:20:25

GNOME桌面應(yīng)用

2010-01-18 15:43:35

VB.NET自定義屬性

2009-11-05 10:38:05

Visual Stud

2015-01-14 15:06:48

定義相機(jī)

2009-07-20 13:47:08

iBATIS.NET字

2015-02-12 15:38:26

微信SDK

2023-05-28 13:11:43

Plotly指標(biāo)圖表

2012-11-19 11:07:42

IBMdw

2021-07-15 16:41:21

Swift查詢函數(shù)

2010-08-03 16:13:01

FlexBuilder

2024-09-11 14:46:48

C#旋轉(zhuǎn)按鈕

2022-08-04 18:30:59

DockerfileDocker 鏡像Linux

2021-07-16 11:00:40

Django用戶模型Python

2016-12-26 15:25:59

Android自定義View
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)