成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python難點(diǎn):面向?qū)ο缶幊蹋∣OP)

stonezhu / 2754人閱讀

摘要:學(xué)習(xí)廖雪峰官方網(wǎng)站教程總結(jié)面向?qū)ο缶幊炭偨Y(jié),供日后參考類和實(shí)例類的定義限制實(shí)例只能添加指定的屬性類屬性初始化值,創(chuàng)建實(shí)例必須綁定的屬性變量設(shè)置,保證類內(nèi)部數(shù)據(jù)安全創(chuàng)建類,實(shí)質(zhì)上是元類,類的定義本質(zhì)上就是利用創(chuàng)建類先定義函數(shù)創(chuàng)建實(shí)例報(bào)錯(cuò),不能

學(xué)習(xí)廖雪峰官方網(wǎng)站python教程總結(jié)
python面向?qū)ο缶幊蘋OP(Object Oriented Programming)總結(jié),供日后參考
1.類和實(shí)例

#類的定義
class Student(object):
    #限制實(shí)例只能添加指定的屬性
    __slots__ = ("sex","age")
    #類屬性
    school = "QingHua"
    #初始化值,創(chuàng)建實(shí)例必須綁定的屬性
    def __init__(self,name,score):
        #private變量
        self.__name = name
        self.__score = score
    #設(shè)置getter,setter保證類內(nèi)部數(shù)據(jù)安全
    def get_name(self):
        return self.__name
    def get_score(self):
        return self.__score
    def set_name(self,name):
        self.__name = name
    def set_score(self,score):
        self.__score = score
    def hello(self,name="world"):
        print("Hello, %s." % name)
#type()創(chuàng)建類,type()實(shí)質(zhì)上是元類(metaclass),類的定義本質(zhì)上就是利用type()創(chuàng)建類
def fn(self, name="world"): # 先定義函數(shù)
    print("Hello, %s." % name)
Student = type("Student",(object,),dict(hello=fn))

#創(chuàng)建實(shí)例
jim = Student("Jim",120)
print(jim.school) #QingHua
print(jim.name) #Jim
print(Student.school) #QingHua
jim.age = 20
jim.height = 170 #報(bào)錯(cuò),不能添加__slots__未指定的屬性

2.@property
上例中,為了保護(hù)內(nèi)部數(shù)據(jù)的安全,我們使用setter,getter方式封裝數(shù)據(jù),能夠防止用戶隨心所欲地修改數(shù)據(jù),但是不夠簡(jiǎn)潔。使用@property裝飾器可以幫助我們改造成我們想要的樣子

class Student(object):
    def __init__(self,birth):
        #private變量
        self.__birth = birth
    @property 
    def birth(self):
        return self.__birth
    @birth.setter
    def birth(self,value):
        self.__birth = value
    @property
    def age(self):
        return 2018-self.__birth
#birth為可讀寫屬性,age是只讀屬性
s = Student(1995)
s.birth #實(shí)際轉(zhuǎn)化為s.get_birth  結(jié)果:1995
s.birth = 1996 #實(shí)際轉(zhuǎn)化為s.set_birth 
s.age #22
s.age = 20 #報(bào)錯(cuò),當(dāng)前age為只讀屬性

3.繼承和多態(tài)

class Animal(object):
    def run(self):
        print("Animal is running")
class Dog(Animal):
    def run(self):
        print("Dog is runing")
class Cat(Animal):
    pass
dog = Dog()
cat = Cat()
dog.run() #Dog is running Dog類重寫了Animal的run方法
cat.run() #Animal is running Cat類繼承了Animal的run方法

#多態(tài)
def run_log(obj):
    obj.run()
run_log(Animal()) #Animal is running
run_log(Dog()) #Dog is running
#傳說(shuō)中的file-like object
class other(object):
    def run():
        print("other is running")
#傳入任何實(shí)現(xiàn)run方法的對(duì)象都可以,這就是動(dòng)態(tài)語(yǔ)言多分魅力
run_log(other) #other is running

4.自定義類

#__str__讓class作用于print()
class Student(object):
    def __init__(self,name):
        self.name = name
    def __str__(self):
        return "Student name:%s" % self.name
    #__repr__用于調(diào)試服務(wù),__str__用于用戶打印
    __repr__ = __str__
print(Student("Tom")) # Student name:Tom

#__iter__
#將class處理成tuple或list可迭代
class Fib(object):
    def __init__(self):
        self.a,slef.b = 0,1
    def __iter__(self):
        return self
    def __next__(self):
        self.a,self.b = self.b,self.a+self.b
        if self.a>100
            raise StopIteration()
        return self.a
for n in Fib():
    print(n)
#1 1 2 3 5 8 13 21 34 55 89   

#__getitem__()  __getattr__()  __call__()方法,以后用的時(shí)候具體了解

5.枚舉類

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)
#value屬性自動(dòng)賦給成員int變量,默認(rèn)從1開始
#Enum派生自定義類

from enum import Enum,unique
@unique
class Weekday(Enum):
    Sun = 0
    Mon = 1
    Tue = 2
    Wed = 3
    Thu = 4
    Fri = 5
    Sat = 6
#@unique裝飾器幫助我們檢查保證沒有重復(fù)值
    

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41372.html

相關(guān)文章

  • Python 面向對(duì)象編程OOP (一) 類,對(duì)象,屬性,訪問權(quán)限

    摘要:面向?qū)ο缶幊讨镁幊淌鞘裁创蠹液?,作為小白,最近學(xué)習(xí)了很多編程的知識(shí),因?yàn)槟X容量有限,特此一一按照學(xué)習(xí)順序記錄下來(lái),如果哪里有錯(cuò)誤,還請(qǐng)大神盡快指出,以免誤導(dǎo)他人。。。繼承也允許把一個(gè)派生類的對(duì)象作為一個(gè)基類對(duì)象對(duì)待。 Python面向?qū)ο缶幊讨?OOP編程是什么 大家好,作為小白,最近學(xué)習(xí)了很多Python OOP編程的知識(shí),因?yàn)槟X容量有限,特此一一按照學(xué)習(xí)順序記錄下來(lái),如果哪里有...

    hiyayiji 評(píng)論0 收藏0
  • Python 面向對(duì)象編程OOP (三) 類方法,靜態(tài)方法

    摘要:類的方法概覽首先回顧一下常見的三種方法實(shí)例接口方法類方法靜態(tài)方法標(biāo)準(zhǔn)書寫方式如下我們最常用的其實(shí)就是普通的接口方法,其他兩個(gè)需要用類似裝飾器的寫法來(lái)標(biāo)注。類方法接受一個(gè)作為參數(shù),它是指向本身的,并不是所創(chuàng)建的實(shí)例。 類的方法概覽 首先回顧一下Python OOP常見的三種方法: instance method 實(shí)例/接口方法 class method 類方法 static...

    JerryZou 評(píng)論0 收藏0
  • Python OOP 面向對(duì)象編程

    摘要:時(shí)代,如果需要手動(dòng)繼承,如多態(tài)多態(tài)是指,不同的子類對(duì)象調(diào)用相同的父類方法,會(huì)產(chǎn)生多態(tài)多樣結(jié)果的編程特性。 參考:黑馬程序員教程 - Python基礎(chǔ) 面向?qū)ο?OOP三大特性,且三個(gè)特性是有順序的: 封裝 繼承 多態(tài) 封裝 指的就是把現(xiàn)實(shí)世界的事務(wù),封裝、抽象成編程里的對(duì)象,包括各種屬性和方法。這個(gè)一般都很簡(jiǎn)單,不需要多講。 唯一要注意的就是:推薦從小往大開始封裝、開發(fā)類。比如手槍...

    weknow619 評(píng)論0 收藏0
  • [零基礎(chǔ)學(xué)python]關(guān)于類的初步認(rèn)識(shí)

    摘要:反對(duì)者在某些領(lǐng)域?qū)Υ擞枰苑裾J(rèn)。下面再引用一段來(lái)自維基百科中關(guān)于的歷史。類的更嚴(yán)格的定義是由某種特定的元數(shù)據(jù)所組成的內(nèi)聚的包。類還可以有運(yùn)行時(shí)表示形式元對(duì)象,它為操作與類相關(guān)的元數(shù)據(jù)提供了運(yùn)行時(shí)支持。 在開始部分,請(qǐng)看官非常非常耐心地閱讀下面幾個(gè)枯燥的術(shù)語(yǔ)解釋,本來(lái)這不符合本教程的風(fēng)格,但是,請(qǐng)看官諒解,因?yàn)榱形粚?lái)一定要閱讀枯燥的東西的。這些枯燥的屬于解釋,均來(lái)自維基百科。 1、問題...

    王巖威 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<