国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python基礎(chǔ)之(八)類

Freeman / 475人閱讀

摘要:方法綁定方法多重繼承實(shí)例化實(shí)現(xiàn)了方法和實(shí)例的綁調(diào)用綁定方法非綁定方法在子類中,父類的方法就是非綁定方法,因?yàn)樵谧宇愔校瑳]有建立父類的實(shí)例,卻要是用父類的方法。

創(chuàng)建類

第一形式

# !/usr/bin/env python
# coding=utf-8

class Person(object): #object表示繼承自object類,Python3中可省略次內(nèi)容
    """
    This is a sample of Class
    """
    breast = 90  #類的屬性 是靜態(tài)變量
    
    def __init__(self, name): #初始化方法  self為對(duì)象實(shí)例本身
        self.name = name
        
    def get_name(self):  #類的方法
        return self.name
    
    def color(self,color):
        d = {}
        d[self.name] = color;
        return d
    
if __name__ == "__main__":
    girl = Person("songjia")
    print girl.name
    girl.name ="liu"
    print girl.get_name()
    print girl.color("white")
    girl.breast = 80 #修改實(shí)例的屬性
    print girl.breast
    print Person.breast #類屬性不會(huì)隨實(shí)例屬性的改變而改變
    Person.breast = 100
    print Person.breast
    print girl.breast

第二種形式

>>> __metaclass__ = type
>>> class CC:
...     pass
... 
>>> cc = CC()
>>> cc.__class__

>>> type(cc)
實(shí)例
girl = Person("songjia")
類屬性
>>> class A(object):    #Python 3: class A:
...         x = 7  #類的屬性
... 

下面列出類的幾種特殊屬性的含義:

C.__name__:以字符串的形式,返回類的名字,注意這時(shí)候得到的僅僅是一個(gè)字符串,它不是一個(gè)類對(duì)象

C.__doc__:顯示類的文檔

C.__base__:類C的所有父類。如果是按照上面方式定義的類,應(yīng)該顯示object,因?yàn)橐陨纤蓄惗祭^承了它。等到學(xué)習(xí)了“繼承”,再來看這個(gè)屬性,內(nèi)容就豐富了

C.__dict__:以字典形式顯示類的所有屬性

C.__module__:類所在的模塊

實(shí)例屬性
>>> class A(object):    #Python 3: class A:
...         x = 7  #類的屬性
... 
>>> foo = A()
>>> foo.x #實(shí)例屬性
類中變量引用可變數(shù)據(jù)
>>> class B(object):
...     y = [1, 2, 3]
    
   >>> B.y         #類屬性
[1, 2, 3]
>>> bar = B()
>>> bar.y       #實(shí)例屬性
[1, 2, 3]

>>> bar.y.append(4)
>>> bar.y
[1, 2, 3, 4]
>>> B.y
[1, 2, 3, 4]

>>> B.y.append("aa")
>>> B.y
[1, 2, 3, 4, "aa"]
>>> bar.y
[1, 2, 3, 4, "aa"]

當(dāng)類中變量引用的是可變對(duì)象是,類屬性和實(shí)例屬性都能直接修改這個(gè)對(duì)象,從而影響另一方的值。

訪問限制
# !/usr/bin/env python
# coding=utf-8

class Person(object):
    """
    This is a sample of Class
    """
    
    def __init__(self, name): #初始化方法  self為對(duì)象實(shí)例本身
        self.__name = name #__xx雙下劃線表示類的私有變量
        
    def get_name(self):  #類的方法
        return self.__name #類的內(nèi)部可以訪問
    
if __name__ == "__main__":
    girl = Person("songjia")
    print girl.get_name()
    print girl._name #無法訪問類的私有變量
文檔字符串

在函數(shù)、類或者文件開頭的部分寫文檔字符串說明,一般采用三重引號(hào)。這樣寫的最大好處是能夠用help()函數(shù)看。

"""This is python lesson"""

def start_func(arg):
   """This is a function."""
   pass

class MyClass:
   """This is my class."""
   def my_method(self,arg):
       """This is my method."""
       pass
繼承 單繼承
#!/usr/bin/env python
# coding=utf-8

class Person(object):        #Python 3: class Person:
    def __init__(self, name):
        self.name = name
    
    def height(self, m):
        h = dict((["height", m],))
        return h

    def breast(self, n):
        b = dict((["breast", n],))
        return b

class Girl(Person):  #繼承
    def get_name(self):
        return self.name

if __name__ == "__main__":
    cang = Girl("liuguoquan")
    print cang.get_name()        #Python 3: print(cang.get_name()),下同,從略
    print cang.height(160)
    print cang.breast(90)
調(diào)用覆蓋的方法
class Girl(Person):
   def __init__(self, name):
       #Person.__init__(self, name) #調(diào)用父類的方法
       super(Girl, self).__init__(name) #調(diào)用父類的方法常用寫法
       self.real_name = "Aoi sola"

   def get_name(self):
       return self.name
       
if __name__ == "__main__":
   cang = Girl("canglaoshi")
   print cang.real_name
   print cang.get_name()
   print cang.height(160)
   print cang.breast(90)

執(zhí)行結(jié)果為:

    Aoi sola
    canglaoshi
    {"height": 160}
    {"breast": 90}
多繼承
#!/usr/bin/env python
# coding=utf-8

class Person(object):        #Python 3: class Person:
    def eye(self):
        print "two eyes"

    def breast(self, n):
        print "The breast is: ",n

class Girl(object):        #Python 3: class Gril:
    age = 28
    def color(self):
        print "The girl is white"

class HotGirl(Person, Girl): #多重繼承
    pass

if __name__ == "__main__":
    kong = HotGirl()
    kong.eye()
    kong.breast(90)
    kong.color()
    print kong.age
    
two eyes
The breast is:  90
The girl is white
28
多重繼承的順序-廣度優(yōu)先
class K1(object):        #Python 3: class K1:
   def foo(self):
       print "K1-foo"    #Python 3: print("K1-foo"),下同,從略

class K2(object):        #Python 3: class K2:
   def foo(self):
       print "K2-foo"
   def bar(self):
       print "K2-bar"

class J1(K1, K2):
   pass

class J2(K1, K2):
   def bar(self):
       print "J2-bar"

class C(J1, J2):
pass
   
if __name__ == "__main__":
print C.__mro__
m = C()
m.foo()
m.bar()
   
K1-foo
J2-bar

代碼中的print C.__mro__是要打印出類的繼承順序。從上面清晰看出來了。如果要執(zhí)行foo()方法,首先看J1,沒有,看J2,還沒有,看J1里面的K1,有了,即C==>J1==>J2==>K1;bar()也是按照這個(gè)順序,在J2中就找到了一個(gè)。

這種對(duì)繼承屬性和方法搜索的順序稱之為“廣度優(yōu)先”。
Python 2的新式類,以及Python 3中都是按照此順序原則搜尋屬性和方法的。

方法 綁定方法
#!/usr/bin/env python
# coding=utf-8

class Person(object):        #Python 3: class Person:
    def eye(self):
        print "two eyes"

    def breast(self, n):
        print "The breast is: ",n

class Girl(object):        #Python 3: class Gril:
    age = 28
    def color(self):
        print "The girl is white"

class HotGirl(Person, Girl): #多重繼承
    pass

if __name__ == "__main__":
    kong = HotGirl() #實(shí)例化實(shí)現(xiàn)了方法和實(shí)例的綁
    kong.eye() #調(diào)用綁定方法
非綁定方法

在子類中,父類的方法就是非綁定方法,因?yàn)樵谧宇愔校瑳]有建立父類的實(shí)例,卻要是用父類的方法。

靜態(tài)方法和類方法
#!/usr/bin/env python
# coding=utf-8

__metaclass__ = type

class StaticMethod: #靜態(tài)方法
    @staticmethod
    def foo():
        print "This is static method foo()."

class ClassMethod: #類方法
    @classmethod
    def bar(cls): #類方法必須有cls參數(shù)
        print "This is class method bar()."
        print "bar() is part of class:", cls.__name__

if __name__ == "__main__":
    static_foo = StaticMethod()    #實(shí)例化
    static_foo.foo()               #實(shí)例調(diào)用靜態(tài)方法
    StaticMethod.foo()             #通過類來調(diào)用靜態(tài)方法
    print "********"
    class_bar = ClassMethod()
    class_bar.bar()
    ClassMethod.bar()
    
This is static method foo().
This is static method foo().
********
This is class method bar().
bar() is part of class: ClassMethod
This is class method bar().
bar() is part of class: ClassMethod

在python中:

@staticmethod表示下面的方法是靜態(tài)方法

@classmethod表示下面的方法是類方法

多態(tài)和封裝 多態(tài)
class Cat:
   def speak(self):
       print "meow!"

class Dog:
   def speak(self):
       print "woof!"

class Bob:
   def bow(self):
       print "thank you, thank you!"
   def speak(self):
       print "hello, welcome to the neighborhood!"
   def drive(self):
       print "beep, beep!"

def command(pet):
   pet.speak()

pets = [ Cat(), Dog(), Bob() ]

for pet in pets:
   command(pet)

Python中的多態(tài)特點(diǎn),Python不檢查傳入對(duì)象的類型,這種方式被稱之為“隱式類型”(laten typing)或者“結(jié)構(gòu)式類型”(structural typing),也被通俗的稱為“鴨子類型”(duck typeing),Python是弱類型語言。

Java會(huì)檢查傳入對(duì)象的類型,所以是強(qiáng)類型語言。

封裝和私有化

要了解封裝,離不開“私有化”,就是將類或者函數(shù)中的某些屬性限制在某個(gè)區(qū)域之內(nèi),外部無法調(diào)用。

Python中私有化的方法也比較簡單,就是在準(zhǔn)備私有化的屬性(包括方法、數(shù)據(jù))名字前面加雙下劃線。例如:

#!/usr/bin/env python
# coding=utf-8

class ProtectMe(object):        #Python 3: class ProtectMe:
    def __init__(self):
        self.me = "qiwsir"
        self.__name = "kivi" #私有變量

    def __python(self): #私有方法
        print "I love Python."        

    def code(self):
        print "Which language do you like?"
        self.__python()

if __name__ == "__main__":
    p = ProtectMe()
    print p.me
    print p.code()
如何將一個(gè)方法變成屬性調(diào)用?

可以使用property函數(shù)。

#!/usr/bin/env python
# coding=utf-8

class ProtectMe(object):        #Python 3: class ProtectMe:
    def __init__(self):
        self.me = "qiwsir"
        self.__name = "kivi" #私有變量

    def __python(self): #私有方法
        print "I love Python."        

    @property
    def code(self):
        print "Which language do you like?"
        self.__python

if __name__ == "__main__":
    p = ProtectMe()
    print p.me
    print p.code #調(diào)用方法名即可

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/38203.html

相關(guān)文章

  • Python爬蟲學(xué)習(xí)路線

    摘要:以下這些項(xiàng)目,你拿來學(xué)習(xí)學(xué)習(xí)練練手。當(dāng)你每個(gè)步驟都能做到很優(yōu)秀的時(shí)候,你應(yīng)該考慮如何組合這四個(gè)步驟,使你的爬蟲達(dá)到效率最高,也就是所謂的爬蟲策略問題,爬蟲策略學(xué)習(xí)不是一朝一夕的事情,建議多看看一些比較優(yōu)秀的爬蟲的設(shè)計(jì)方案,比如說。 (一)如何學(xué)習(xí)Python 學(xué)習(xí)Python大致可以分為以下幾個(gè)階段: 1.剛上手的時(shí)候肯定是先過一遍Python最基本的知識(shí),比如說:變量、數(shù)據(jù)結(jié)構(gòu)、語法...

    liaoyg8023 評(píng)論0 收藏0
  • 基礎(chǔ)如何學(xué)爬蟲技術(shù)

    摘要:楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲技術(shù)以供學(xué)習(xí),。本文來源知乎作者路人甲鏈接楚江數(shù)據(jù)提供網(wǎng)站數(shù)據(jù)采集和爬蟲軟件定制開發(fā)服務(wù),服務(wù)范圍涵蓋社交網(wǎng)絡(luò)電子商務(wù)分類信息學(xué)術(shù)研究等。 楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲技術(shù)以供學(xué)習(xí),http://www.chujiangdata.com。 第一:Python爬蟲學(xué)習(xí)系列教程(來源于某博主:htt...

    KunMinX 評(píng)論0 收藏0
  • Python 基礎(chǔ)起步 () 字典實(shí)用技巧大全,申精干貨,必看!

    摘要:,同為小白的朋友們大家好,這期主要為大家?guī)碛嘘P(guān)字典的一些實(shí)用技巧。上篇筆記通過感人肺腑的老白讓大家認(rèn)識(shí)到了字典這么有用的數(shù)據(jù)類型,這一期讓我們看看如何能更好的操作字典。 Hello ,同為小白的朋友們大家好,這期主要為大家?guī)碛嘘P(guān)字典的一些實(shí)用技巧。上篇筆記通過感人肺腑的老白讓大家認(rèn)識(shí)到了字典這么有用的數(shù)據(jù)類型,這一期讓我們看看如何能更好的操作字典。 基礎(chǔ)篇 下面我給大家來一個(gè)簡單的...

    flybywind 評(píng)論0 收藏0
  • 干貨 | 學(xué)習(xí)Python的正確姿勢(shì)

    摘要:勤學(xué)學(xué)習(xí)效率與效果取決于執(zhí)行力。這一步學(xué)習(xí)的正確姿勢(shì)是在實(shí)踐操作中發(fā)掘問題,然后帶著問題找答案。拆分任務(wù)將目標(biāo)分解成具體可執(zhí)行的學(xué)習(xí)任務(wù)。勤學(xué)強(qiáng)大的執(zhí)行力是學(xué)習(xí)的根本保障。分享復(fù)述檢驗(yàn)學(xué)習(xí)成果,提高學(xué)習(xí)效果的最好方法。 showImg(https://segmentfault.com/img/bVbcPGZ?w=256&h=256); 前段時(shí)間和大家一起分享了一篇關(guān)于學(xué)習(xí)方法內(nèi)容《大牛...

    Thanatos 評(píng)論0 收藏0
  • Python 進(jìn)階路 () 最用心的推導(dǎo)式詳解 (附簡單實(shí)戰(zhàn)及源碼)

    摘要:什么是推導(dǎo)式大家好,今天為大家?guī)韱栁易钕矚g的推導(dǎo)式使用指南,讓我們先來看看定義推導(dǎo)式是的一種獨(dú)有特性,推導(dǎo)式是可以從一個(gè)數(shù)據(jù)序列構(gòu)建另一個(gè)新的數(shù)據(jù)序列的結(jié)構(gòu)體。 什么是推導(dǎo)式 大家好,今天為大家?guī)韱栁易钕矚g的Python推導(dǎo)式使用指南,讓我們先來看看定義~ 推導(dǎo)式(comprehensions)是Python的一種獨(dú)有特性,推導(dǎo)式是可以從一個(gè)數(shù)據(jù)序列構(gòu)建另一個(gè)新的數(shù)據(jù)序列的結(jié)構(gòu)體。...

    hufeng 評(píng)論0 收藏0

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

0條評(píng)論

Freeman

|高級(jí)講師

TA的文章

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