1. 程式人生 > >python 中的類

python 中的類

多態 類變量 一個 int 繼承方式 items += 繼承 實現

python 中的類
內容概述
類的概念:
類是一組方法與屬性的抽象集。
  屬性
    實例變量(每個實例內存中)
    類變量(類內存中)
    私有屬性 __var
  方法
    構造方法
    析構函數(默認就有,代碼為空,寫了則相當於重構它)
    其他方法

對象(object):類的實例(實例化一個類之後得到的對象)
類的特性: 
封裝:
  把一些功能的實現細節不對外暴露
繼承:
繼承順序:(先覆蓋、再繼承、再添加)
  繼承:代碼復用
  繼承方式:
  單繼承
  多繼承
    2.7 經典類 深度優先
      新式類 廣度優先
    3.x 均廣度優先
多態:
  接口重用(一種接口,多種實現)


---

1創建一個類:
------

class 關鍵字,SchoolMember 類名(object) 新式類寫法
class SchoolMember(object):
member = 0 #類變量
def __init__(self,name,age,sex):
self.name = name #實例屬性
self.age = age
self.__sex = sex #定義私有屬性
self.register()

def print_info(self):
print("---info %s start------"%self.name)
for k,v in self.__dict__.items():
print("\t",k,v)
print("---info %s end------" % self.name)

def print_sex(self):
print("%s is %s"%(self.name,self.__sex))
def register(self):
SchoolMember.member +=1
print("now the member is %s" % SchoolMember.member)

def __del__(self):
‘‘‘析構函數‘‘‘
print("del the %s"%self.name)
SchoolMember.member -=1
print("now the member is %s" % SchoolMember.member)

t1 = Teacher(‘aa‘,30,‘M‘,3000,‘py‘) #生成對象
t1.print_sex() #私有屬性在類外部無法直接進行訪問,只能通過類方法去訪問。

類的特性:
-----

1、封裝:
---

封裝是對具體對象的一種抽象,即將某些部分隱藏起來,在程序外部看不到,其含義是其他程序無法調用。

2、繼承:
---

2.1、單繼承
class Animal:
def __init__(self,name,voice=None): # voice初始化默認為None
self.name = name
self.voice = voice
def Say(self):
print(self.voice)
def Run(self):
pass # 空操作語句(不做任何操作)

class CDog(Animal): # 繼承類Animal
# def __init__(self,name,voice):
# super(CDog,self).__init__(name,voice)
def SetVoice(self,voice): # 子類增加函數SetVoice
self.voice = voice
def Run(self): # 子類重載函數Run
print(‘Running‘)

bobo = CDog(‘ala‘)
bobo.SetVoice(‘wang‘)
bobo.Say()

2.2、多繼承 新式類:
class A(object):
def __init__(self):
pass
def f(self):
print(‘A‘)

class B(A):
def __init__(self):
pass
# def f(self):
# print(‘B‘)


class C(A):
def __init__(self):
pass
def f(self):
print(‘C‘)

class D(B,C):
def __init__(self):
super(D, self).__init__()
# def f(self):
# print(‘D‘)

c = D()
c.f()
print(D.__mro__)

輸出信息:
C
(<class ‘__main__.D‘>, <class ‘__main__.B‘>, <class ‘__main__.C‘>, <class ‘__main__.A‘>, <class ‘object‘>)

新式類的繼承方式:廣度優先,繼承先左後右的方式。
3.6 版本的多重繼承方式都是廣度優先。
2.7 版本的新詩類繼承方式也是廣度優先的原則。

經典類的方式:
class A:
def __init__(self):
pass
def f(self):
print(‘A‘)

class B(A):
def __init__(self):
pass
# def f(self):
# print(‘B‘)


class C(A):
def __init__(self):
pass
def f(self):
print(‘C‘)

class D(B,C):
def __init__(self):
#super(D, self).__init__()
B.__init__(self)
C.__init__(self)
# def f(self):
# print(‘D‘)

c = D()
c.f()
#print(D.__mro__)


2.7 版本 輸出 A ,經典類是深度優先。
3.6版本 輸出 C ,廣度優先原則

python 中的類