天天看點

Python類

類(class)

python中的類是描述具有相同屬性和方法的對象的集合類的一般形式:

class ClassName:

    '''類的說明'''

    類的内容

類的内容可以寫類的全局變量,方法等

例子:

class ren(object):

    '''this is a new class'''

    name = 'meinv'

    sex = 'woman'

#類的執行個體化

a = ren()

print(type(a))

print(a.name)

print(a.sex)

a.age = 10

print(a.age)

結果:

<class '__main__.ren'>

meinv

woman

10

類的構造器

__init__ 構造函數,在生成對象時調用。由于類可以起到模闆的作用,是以,可以在建立執行個體的時候,把一些我們認為必須綁定的屬性強制填寫進去。通過定義一個特殊的__init__方法,在建立執行個體的時候,就把name,score等屬性綁上去:

#所有類都繼承object類,不寫則預設是繼承object類

class Student(object):

    #類的構造器,調用類的時候self可以不指定,python解釋器預設将self指定到自身

    def __init__(self, name, score):

        self.name = nam

        self.score = score

例子2:

def __init__(self, name, score):

self.name = name

self.score = score

s = Student('abc', 123)

print(s.name)

print(s.score)

輸出:

abc

123

類的繼承

Python的類支援多繼承,多繼承的格式如下,使用逗号分隔:

class A:

    ...

class B:

class C(A, B):

類的繼承中,Python首先使用子類中的方法,如果子類中沒有則去父類中尋找。變量也相同,首先尋找子類中的變量,沒有找到後才去父類中尋找。

class parent:

    name = 'parent'

    age = 100

    def __init__(self):

        print('my name is parent')

    def get_name(self):

        return self.name

    def get_age(self):

        return self.age

class child(parent):

        print('my name is clild')

    def hello(self):

        print('hello child')

a = child()

a.hello()

print(a.get_name())

print(a.get_age())

my name is clild

hello child

parent

100

類的重寫

Super()方法

#在class parent(object):定義父類的時候,一定要寫繼承object類,不然會報錯可以解決

class parent(object):

    name = 'parent'

    age = 100

    def __init__(self):

    def get_name(self):

        return self.name

    def get_age(self):

        return self.age

        super(child, self).__init__()

        #parent.__init__()

        #使用父類.方法的方式直接重寫,但是類中需要重寫的内容較多時不友善

        print('my name is child.')

    def hello(self):

        print('hello child')

my name is parent

my name is child

類的私有變量

單下劃線開頭表示protected類型變量,在一個子產品中以單下劃線開頭的變量和函數被預設當作内部函數。即保護類型隻能允許其本身與子類進行通路。 當使用“from a_module import *”時,不會将以一個下劃線開頭的對象引入 ;如果使用 import a_module 這樣導入子產品,仍然可以用 a_module._some_var 這樣的形式通路到這樣的對象。

雙下劃線表示私有類型的變,隻能允許這個類本身進行通路,連子類也不可以用。

前後雙下劃線定義的是特列方法。使用者控制的命名空間内的變量或是屬性,如__init__, __import__。隻有當文檔有說明時使用,不要自己定義這類變量。 (就是說這些是python内部定義的變量名)

例子

classPersonDemo():

        self.__name=''

        self.__age=0

        return self.__name

    def set_name(self,value):

        self.__name=value

a=PersonDemo()

a.set_name('kwsy')

print a.get_name()

内置類屬性

__dict__ : 類的屬性(包含一個字典,由類的資料屬性組成)

__doc__ :類的文檔字元串

__name__: 類名

__module__: 類定義所在的子產品(類的全名是'__main__.className',如果類位于一個導入子產品mymod中,那麼className.__module__ 等于 mymod)

__bases__ : 類的所有父類構成元素(包含了以個由所有父類組成的元組)

本文轉自 粗糧面包 51CTO部落格,原文連結:http://blog.51cto.com/culiangmianbao/1979467,如需轉載請自行聯系原作者