日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python学习(八)定制类和枚举

發布時間:2023/12/10 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python学习(八)定制类和枚举 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

`python`定制類主要是實現特定功能,通過在類中定義特定的函數完成特定的功能。

class Student(object):def __init__(self, name):self.name =namestudent = Student("lilei") print(student)

`實現定制類`

class Student(object):def __init__(self, name):self.name = namedef __str__(self):return ("self name is %s" %(self.name))student2 = Student("hanmeimei") print(student2)

?

實現`__str__`函數,可以在print類對象時打印指定信息

通過實現`__iter__`和`__next__`同樣可以使類對象產生可迭代序列,下面實現了`斐波那契數列`

class Fib(object):def __init__(self):self.a , self.b = 0,1def __iter__(self):return selfdef __next__(self):self.a, self.b = self.b, self.a+ self.bf self.a > 30:raise StopIteration()return self.a

打印輸出

for n in Fib():print(n)

可以實現`__getitem__`函數,這樣就可以按照索引訪問類對象中迭代元素了。

class OddNum(object):def __init__(self):self.num = -1def __iter__(self):return selfdef __next__(self):self.num = self.num +2if self.num > 10:raise StopIteration()return self.num def __getitem__(self,n):temp = 1for i in range(n):temp += 2return temp

?

for n in OddNum():print(n)oddnum = OddNum() print(oddnum[3])

?

?

可以進一步完善OddNum類的`__getitem__`函數,使其支持`切片處理`

def __getitem__(self, n):if isinstance(n ,int):temp =1for i in range(n):temp +=2return tempif isinstance(n, slice):start = n.startend = n.stopif start is None:start = 0tempList = []temp = 1for i in range(end):if i >= start:temp += 2tempList.append(temp)return tempList

?


`print(oddnum[1:4])`
通過實現`__getattr__`函數,可以在類對象中沒有某個屬性時,自動調用`__getattr__`函數
實現`__call__`函數,可以實現類對象的函數式調用

def __getattr__(self,attr):if attr == 'name':return 'OddNum'if attr == 'data':return lambda:self.numraise AttributeError('\'OddNum\' object has no attribute \'%s\'' %attr) def __call__(self):return "My name is OddNum!!"

?



只有在沒有找到屬性的情況下,才調用`__getattr__`,已有的屬性不會在`__getattr__`中查找。

print(oddnum.name) print(oddnum.data) #沒有func函數會拋出異常 #print(oddnum.func) #可以直接通過oddnum()函數式調用 print(oddnum())

?


下面是廖雪峰官方網站上的一個鏈式轉化例子,用到了這些特定函數

class Chain(object):def __init__(self, path=''):self.path = pathdef __getattr__(self,attr):return Chain('%s/%s'%(self.path, attr))def users(self, users):return Chain('%s/users/%s' %(self.path, users))def __str__(self):return self.path__repr__ = __str__print(Chain().users('michael').repos)

?

?

class Chain(object):def __init__(self, path=''):self.path = pathdef __getattr__(self,attr):return Chain('%s/%s'%(self.path, attr))def __call__(self, param):return Chain('%s/%s'%(self.path, param))def __str__(self):return self.path__repr__ = __str__print(Chain().get.users('michael').group('doctor').repos)

?

?

python同樣支持`枚舉`操作

from enum import EnumMonth = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))for name, member in Month.__members__.items():print(name, '=>', member, ',', member.value)from enum import Enum Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec') ) for name, member in Month.__members__.items():print(name, '=>', member, ',', member.value)from enum import unique @unique class Weekday(Enum):Sun = 0 # Sun的value被設定為0Mon = 1Tue = 2Wed = 3Thu = 4Fri = 5Sat = 6for name , member in Weekday.__members__.items():print(name, '=>', member, ',', member.value)

?

?

?

我的微信公眾號:

?

轉載于:https://www.cnblogs.com/secondtonone1/p/7458805.html

總結

以上是生活随笔為你收集整理的python学习(八)定制类和枚举的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。