偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

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

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

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

但是,有些情況你不能修改 __init__? 函數(shù)的代碼,比如代碼已經(jīng)運(yùn)行很久了,有很多地方調(diào)用了 Pet 的 __init__ 方法,如果直接修改,可能會(huì)產(chǎ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)庫里也有很多使用 classmethod 的例子,比如 dict.fromkeys 就是一個(gè)例子:

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

責(zé)任編輯:武曉燕 來源: 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自定義前端

2013-05-02 14:08:18

2022-04-14 06:20:25

GNOME桌面應(yīng)用

2009-11-05 10:38:05

Visual Stud

2009-11-12 16:14:28

ADO.NET自定義對(duì)

2021-06-17 06:52:37

C#自定義異常

2021-07-15 16:41:21

Swift查詢函數(shù)

2010-08-03 16:13:01

FlexBuilder

2012-11-19 11:07:42

IBMdw

2022-08-04 18:30:59

DockerfileDocker 鏡像Linux

2024-09-11 14:46:48

C#旋轉(zhuǎn)按鈕

2010-01-18 15:43:35

VB.NET自定義屬性

2015-01-14 15:06:48

定義相機(jī)

2009-07-20 13:47:08

iBATIS.NET字

2023-05-28 13:11:43

Plotly指標(biāo)圖表

2019-12-02 21:29:45

Keras神經(jīng)網(wǎng)絡(luò)TensorFlow

2021-03-29 00:02:10

C#Attribute元素

2015-02-12 15:38:26

微信SDK
點(diǎn)贊
收藏

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