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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

09 类的继承

發(fā)布時間:2023/11/30 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 09 类的继承 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

繼承一個類

class Person(object):

??? def __init__(self, name, gender):

??????? self.name = name

??????? self.gender = gender

?

class Student(Person):

??? def __init__(self, name, gender, score):

??????? super(Student, self).__init__(name, gender)

??????? self.score = score

?

判斷類型

isinstance()可以判斷類型

isinstance(p, Person)

?

多態(tài)

動態(tài)語言和靜態(tài)語言(例如java)的最大差別是,不檢查類型,只要方法存在,參數(shù)正確,就可以調(diào)用。

?

支持多重繼承

?

獲取對象信息

type()??? # 獲取對象類型

dir()??? # 獲取變量所有屬性字符串list,可結(jié)合filter()獲得定制的屬性列表

?

已知屬性名:

getattr(s, 'name')

setattr(s, 'name', 'Adam')

?

?

特殊方法

定義在class中,不需要直接調(diào)用,Python的某些函數(shù)或操作符會調(diào)用對應(yīng)的特殊方法。

?

__getattr__

?

__setattr__

__delattr__

?

__str__??? # 給print看的信息

__repr__??? # 給開發(fā)人員看的信息

__cmp__??? #排序用

__len__??? #讓len()函數(shù)正常工作的話,就必須定義此方法,返回元素個數(shù)

?

四則運算:

__add__

__sub__

__mul__

__div__

?

__int__??? #讓int()函數(shù)工作

__float__??? #讓float()函數(shù)工作

?

?

__slots__??? #一個類允許的屬性列表,即限制當(dāng)前類所能擁有的屬性

class Student(object):

??? __slots__=('name', 'gender', 'score')

??? def __init__(self, name, gender, score):

??????? self.name = name

??????? self.gender = gender

??????? self.score = score

?

__call__??? #將實例變爲(wèi)可調(diào)用對象

在Python中,函數(shù)其實是一個對象;

所有的函數(shù)都是可調(diào)用對象;

一個類實例也可以變成一個可調(diào)用對象,只需要實現(xiàn)一個特殊方法__call__()

例子:把Person類實例變成一個可調(diào)用對象:

class Person(object):

??? def __init__(self, name, gender):

??????? self.name = name

??????? self.gender = gender

???

??? def __call__(self, friend)

??????? print 'My name is %s...' % self.name

??????? print 'My friend is %s...' % friend

?

>>> p = Person('Bob', 'male')

>>> p('Tim')

My name is Bob...

My friend is Tim...

?

對私有屬性的訪問


用get/set方法來封裝對一個屬性的訪問在許多面向?qū)ο缶幊痰恼Z言中都很常見。

但是寫s.get_score()和s.set_score()方法沒有寫s.score來的直接。

可以用裝飾器函數(shù)

class Student(object):

??? def __init__(self, name, score):

??????? self.name = name

??????? self.__score = score

??? @property

??? def score(self):

??????? return self.__score

??? @score.setter

??? def score(self, score):

??????? if score < 0 or score > 100:

??????????? raise ValueError('invalid score')

??????? self.__score = score

?

第一個score(self)是get方法,用@property裝飾

第二個score(self, score)是set方法,用@score.setter裝飾,是@property裝飾后的副產(chǎn)品。

現(xiàn)在就可以像使用屬性一樣設(shè)置score了。

?

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的09 类的继承的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。