亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

python學習(三)面向對象

2019-11-06 07:42:56
字體:
來源:轉載
供稿:網友

python面向對象

繼承

class Person(object): ''' classdocs ''' def __init__(self,name): ''' Constructor ''' self.name = nameclass Student(Person): def __init__(self,age,score): self.age = age self.score = score def PRintInfo(self): print("name is :%s age is :%s score is :%s" %(self.name, self.age,self.score))student = Student(22,89)student.name = "test"student.printInfo()

以上Person類繼承自object,并且有一個name屬性,Student類繼承自Person,定義了一個printInfo方法,用來打印信息,此時運行效果如下: 這里寫圖片描述

私有屬性

在python中,給變量名稱前面增加兩個下劃線,表示該變量是一個私有的變量

class Student(Person): def __init__(self,age,score): self.__age = age self.score = score def printInfo(self): print("name is :%s age is :%s score is :%s" %(self.name, self.age,self.score))

上面age表示私有屬性,不能通過對象來設置值,只能在類內部操作

為私有變量設置get和set方法

class Student(Person): def __init__(self,age,score): self.__age = age self.__score = score def printInfo(self): print("name is :%s age is :%s score is :%s" %(self.name, self.__age,self.__score)) def set_age(self,age): self.__age = age def get_age(self): return self.__agestudent = Student(22,89)student.name = "test"student.set_age(30)student.printInfo()print("age is :%s" %(student.get_age()))

這里寫圖片描述

其實對于私有變量,也不是一定必須要通過get方法來獲取,對于上面的栗子,python解釋器將其解釋成了_Student__age,所以,我們依然可以通過這個屬性來訪問

print("age is :%s" %(student._Student__age)) # 輸出: age is :30

需要注意下面問題

上面我們通過self.__age = age 將age屬性表示為私有屬性,但是有的同學發現好像還是可以通過下面的代碼來設置的

student.age = 12

其實這個是不對的,前面已經說過了,對于私有屬性__age,python解釋器將其解釋為_Student__age,上面的代碼,就相當于為student對象的name屬性賦值

獲取對象信息

可以使用type函數獲取當前對象的類型

print type(Student(22,50))print type(23)print type("string")print type(22.0)

這里寫圖片描述

判斷是否是某個類的實例

python中同樣提供了isinstance函數來判斷一個對象是否是一個類的實例

print isinstance(Student(22,88),Person) #輸出: True

hasattr和setattr

python中提供了setattr來為對象設置一個新的屬性,hasattr判斷是否有一個指定的屬性

student = Student(22,88)print hasattr(student,"score")setattr(student,"year","1990") # 輸出 Trueprint student.year # 輸出 1990

類屬性

上面的所有屬性都是通過self或者對象本身創建的屬性,這些都是對象屬性,那么同樣在python中可以創建一個類似于java中的static屬性,我們稱之為類屬性

class Student(Person): passWord = "Student pass"print("類屬性 password is :%s" %(Student.password)) # 輸出: 類屬性 password is :Student passStudent.password = "a new pass"print("類屬性 password is :%s" %(Student.password)) # 輸出: 類屬性 password is :a new pass

實例屬性的優先級高于類屬性

給實例綁定方法

from types import MethodType class Student(object): password = "Student pass" def __init__(self,age,score): self.age = age self.score = score def printInfo(self): print("age is :%s score is :%s" %(self.age,self.score))def set_age(self,age): self.age = agestudent = Student(22,88)student.name = "王五"student.printInfo()# 使用MethodType為實例綁定方法,注意需要引入對應的模塊student.set_age = MethodType(set_age,student);student.set_age(44)student.printInfo()

上面使用MethodType雖然可以為實例綁定一個方法,但是這個方法對于另外一個實例是沒有效果的,比如:如果我們重新創建一個實例,并且執行上一步綁定的方法,此時會拋出如下錯誤:

studentSecond = Student(23,88)studentSecond.set_age(44)

這里寫圖片描述

為了解決上面的問題,我們可以給整個class綁定方法,這樣該類的所有實例都可以訪問這樣的方法了

def set_age(self,age): self.age = ageStudent.set_age = set_agestudent = Student(22,88)student.name = "王五"student.printInfo()student.set_age = MethodType(set_age,student);student.set_age(44)student.printInfo()studentSecond = Student(23,88)studentSecond.set_age(55)studentSecond.printInfo()

限制類綁定的屬性

# 我們可以使用__slots__在當前類中聲明屬性,這樣的話,當前類的所有實例就只能綁定聲明中已有的屬性class Person(object): ''' classdocs ''' def __init__(self,name): ''' Constructor ''' self.name = nameclass Student(object): __slots__ = ["age","score"] def printInfo(self): print("age is :%s score is :%s" %(self.age,self.score))student = Student()student.age = 22student.score = 33# 試圖綁定name屬性student.name = "wangwu"student.printInfo()

這里寫圖片描述

可以看到這里,我們限定當前類只能綁定age和score屬性,此時當程序試圖綁定name屬性的時候,就會出現錯誤

需要注意的是綁定屬性對于當前類的子類是沒有效果的,看下面栗子

class SubStudent(Student): passsubStudent = SubStudent()subStudent.age = 33subStudent.score = 55subStudent.name = "xiaolizi"subStudent.printInfo()print subStudent.name

把方法變成屬性

我們可以通過”@property”

class Student(object): @property def age(self): return self._age @age.setter def age(self,value): self._age= value def printInfo(self): print("age is :%s score is :%s" %(self.age,self.score))student = Student()student.age = 55print student.age # 輸出: 55

python多繼承

另外在python中是支持多繼承的,看下面的栗子

class Person(object): ''' classdocs ''' def __init__(self,name): ''' Constructor ''' self.name = nameclass MusicTeacher(Person): def learnMusic(self): print "student need to learn music"class MathTeacher(Person): def learnMath(self): print "student need to learn math"class Student(MusicTeacher,MathTeacher): @property def age(self): return self._age @age.setter def age(self,value): self._age= value def printInfo(self): print("name is :%s age is :%s" %(self.name,self.age))student = Student("張三")student.age = 55student.printInfo()student.learnMath()student.learnMusic()

學生會學習音樂和數學這兩門課程,此時運行效果如下: 這里寫圖片描述

重寫”toString”

這里之所以給”toString”添加上雙引號,是因為這里實際并不是一個toString方法,看下面栗子

class Student(MusicTeacher,MathTeacher): @property def age(self): return self._age @age.setter def age(self,value): self._age= valuestudent = Student("張三")student.age = 55print student

這里此時打印如下: 這里寫圖片描述 可以看到,這里和java中一樣,打印的是student實例的內存地址,不過我們可以通過添加像java中的toString方法

def __str__(self): return "student name is :"+self.name

此時效果如下: 這里寫圖片描述

對實例進行調用

另外,在python中可以直接調用對象,只需要為當前類添加如下方法的實現即可:

__call__()

看下面栗子:

class Student(MusicTeacher,MathTeacher): @property def age(self): return self._age @age.setter def age(self,value): self._age= value def __call__(self): print "This is student self call...."student = Student("張三")student.age = 55student()

這里寫圖片描述

枚舉實現

在python中,同樣支持枚舉類型,在3.6上直接支持,我的是在2.7上的實現,看下面栗子

def enum(**enums): return type('Enum', (), enums)Weeks = enum(MONDY=1, TUESDAY=2, WENSDAY='three')print str(Weeks.MONDY)+" "+str(Weeks.TUESDAY)+" "+Weeks.WENSDAY

這里寫圖片描述

動態創建一個類

在python中,可以通過type動態創建一個類,看下面栗子

def sayHello(self): print "hello world"Hello = type('Hello', (object,), dict(sayHello=sayHello)) # 創建Hello classhello = Hello()hello.sayHello() # 輸出: hello world
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品久久久久久久久久入口| 国产99视频精品免视看7| 成人av电影天堂| 国产精品稀缺呦系列在线| 成人免费午夜电影| 国产乱肥老妇国产一区二| 国产精品久久一区| 日韩av观看网址| 中文字幕精品久久| 日韩av在线影视| 精品日韩视频在线观看| 欧美人与物videos| 久久久久国产视频| 国产亚洲a∨片在线观看| 日韩在线视频免费观看高清中文| 欧美电影电视剧在线观看| 日韩精品中文字幕视频在线| 欧洲美女7788成人免费视频| 92国产精品久久久久首页| 午夜精品一区二区三区av| 国产精品精品视频| 久久久久这里只有精品| 久久精品视频免费播放| 日韩成人在线网站| 91国产高清在线| 国产午夜一区二区| 久久国产精品99国产精| 亚洲综合av影视| 亚洲精品动漫久久久久| 久久久久中文字幕2018| 欧美一级在线亚洲天堂| 国产日韩欧美综合| 欧美裸体xxxx极品少妇软件| 91久久国产婷婷一区二区| 九九精品在线观看| 久久久久久成人| 日韩av中文字幕在线播放| 在线播放国产一区中文字幕剧情欧美| 在线中文字幕日韩| 欧美日韩在线观看视频小说| 91中文字幕在线观看| 国产欧美亚洲精品| 精品久久久久久久中文字幕| 日韩av中文字幕在线播放| 亚洲伊人久久综合| 欧美日韩亚洲精品一区二区三区| 另类天堂视频在线观看| 一区二区三区久久精品| 成人av资源在线播放| 亚洲精品国产品国语在线| 青青青国产精品一区二区| 日本韩国欧美精品大片卡二| 浅井舞香一区二区| 日本中文字幕成人| 亚洲乱码av中文一区二区| 欧美一区二区视频97| 日韩电影中文字幕在线| 另类色图亚洲色图| 亚洲精品在线看| 91免费高清视频| 亚洲欧美制服另类日韩| 国产成人精品一区二区| 2019中文在线观看| 亚洲欧美日韩中文视频| 久久成人国产精品| 国产午夜精品全部视频在线播放| 97精品视频在线播放| 国产精自产拍久久久久久| 久久香蕉国产线看观看网| 91探花福利精品国产自产在线| 色爱av美腿丝袜综合粉嫩av| 久久大大胆人体| 日韩亚洲精品电影| 日韩精品视频免费在线观看| 国产午夜精品久久久| 亚洲天堂视频在线观看| 色偷偷av亚洲男人的天堂| 亚洲无限乱码一二三四麻| 欧美性猛交xxxx乱大交3| 久久久国产精品亚洲一区| 成人激情春色网| 国产精品黄色影片导航在线观看| 日韩av网址在线| 国产一区玩具在线观看| www.xxxx精品| 欧美成人黄色小视频| 国产精品91免费在线| 日韩专区在线播放| 日韩在线观看成人| 欧美黄色三级网站| 亚洲精品之草原avav久久| 国产精品日韩电影| 日韩的一区二区| 国产精品日韩在线一区| 精品久久久久久久久久| 日本精品免费一区二区三区| 久久99久久99精品免观看粉嫩| 日韩精品中文字幕在线播放| 91久久精品国产91性色| 欧美性猛交xxxx黑人猛交| 亚洲欧洲在线视频| 欧美中文字幕在线观看| 亚洲欧美在线磁力| 国产人妖伪娘一区91| 成人免费观看网址| 欧美亚洲国产日本| 日韩av在线导航| 欧美在线一区二区三区四| 久久五月情影视| 97成人精品视频在线观看| 日韩av网址在线| 亚洲四色影视在线观看| 97香蕉超级碰碰久久免费的优势| 欧美日韩国产精品一区二区三区四区| 久久精品国亚洲| 国产精品久久久久福利| 中日韩美女免费视频网站在线观看| 久久久久久久久久av| 亚洲精选中文字幕| 亚洲天堂av在线免费| 亚洲日本欧美日韩高观看| 精品美女永久免费视频| 中文字幕久久精品| 狠狠色噜噜狠狠狠狠97| 91免费精品视频| 欧美成人激情在线| 亚洲国产高潮在线观看| 久久久久久久香蕉网| 97人人爽人人喊人人模波多| 亚洲最大av在线| 国产精品一二三视频| 国产亚洲精品久久久久久牛牛| 在线视频亚洲欧美| 国产精品视频区| 精品福利在线看| 日韩中文字幕在线视频播放| 日韩电视剧在线观看免费网站| 日韩av电影国产| 亚洲欧美另类人妖| 欧美电影免费观看高清| 97国产精品视频| 国产乱人伦真实精品视频| 欧美激情在线观看视频| 91美女福利视频高清| 97久久精品视频| 久久免费视频这里只有精品| 91美女片黄在线观看游戏| 激情亚洲一区二区三区四区| 91精品在线观看视频| 国产精品麻豆va在线播放| 国产精品一区二区三区免费视频| 久久亚洲精品小早川怜子66| 91在线视频导航| 中文字幕欧美专区| 中文字幕久热精品在线视频| 国产精品久久久91| 成人a免费视频| 国产日韩欧美电影在线观看| 麻豆成人在线看| 亚洲色图美腿丝袜| 亚洲欧美www| 97**国产露脸精品国产| 国产精品黄色影片导航在线观看| 日本一区二区在线播放|