1. 程式人生 > >python類與方法

python類與方法

函式

# 定義函式
def printme( str ):
   
   print (str);
   return;
 
# 呼叫函式
printme("我要呼叫使用者自定義函式!");
printme("再次呼叫同一函式");

類的優點:

1、類物件是多型的:也就是多種形態,這意味著我們可以對不同的類物件使用同樣的操作方法,而不需要額外寫程式碼。
2、類的封裝:封裝之後,可以直接呼叫類的物件,來操作內部的一些類方法,不需要讓使用者看到程式碼工作的細節。
3、類的繼承:類可以從其它類或者元類中繼承它們的方法,直接使用。

類的定義

1、定義類

class Test:
	def name(self,name):
		self.name = name

一第行,語法是class 後面緊接著,類的名字,最後別忘記“冒號”,這樣來定義一個類。
類的名字,首字母,有一個不可文的規定,最好是大寫,這樣需要在程式碼中識別區分每個類。
第二行開始是類的方法,大家看到了,和函式非常相似,但是與普通函式不同的是,它的內部有一個“self”,引數,它的作用是對於物件自身的引用。

2、初始化物件

建立類時,可以定義一個特定的方法,名為__init__(),只要建立這個類的一個例項就會執行這個方法。可以向__init__()方法傳遞引數,這樣建立物件時就可以把屬性設定為你希望的值__init__()這個方法會在建立物件時完成初始化
class People:
	def __init__(self,name,age,sex):  
		self.Name = name
		self.Age = age;
		self.Sex = sex;
	def speak(self):
		print ("my name"+self.Name)

peo_1 = People("haha",24,"man")
print(peo_1.Name)
print(peo_1.Age)
print("\n")
peo_2 = People("hehe",20,"girl")
print(peo_2.Name)
print(peo_2.Age)

之前多次用到self這個形參類就好比是一張藍圖,使用一個類可以建立多個物件例項,speak()方法在被呼叫時,必須知道是哪個物件呼叫了它.

這裡self引數就會告訴方法是哪個物件來呼叫的.這稱為例項引用。

3、類的私有屬性

  __private_attrs 兩個下劃線開頭,宣告該屬性為私有,不能在類地外部被使用或直接訪問。在類內部的方法中使用時 self.__private_attrs

4、靜態方法

也可以沒有self,即靜態方法,@staticmethod是指類中無需例項參與即可呼叫的方法(不需要self引數),在呼叫過程中,無需將類例項化,直接在類之後使用.號運算子呼叫方法。

class ClassA(object):

    @staticmethod
    def func_a():
        print('Hello Python')


ClassA.func_a() #直接呼叫
  
ca = ClassA()  #物件引用
ca.func_a()

5、classmethod   (類方法)

 在python中.類方法 @classmethod 是一個函式修飾符,它表示接下來的是一個類方法,而對於平常我們見到的則叫做例項方法。 類方法的第一個引數cls,而例項方法的第一個引數是self,表示該類的一個例項。

class ClassA(object):

    @classmethod
    def func_a(cls):
        print(type(cls), cls)


if __name__ == '__main__':

    ClassA.func_a()

    ca = ClassA()
    ca.func_a()

這裡還需要注意,如果存在類的繼承,那類方法獲取的類是類樹上最底層的類。

class BaseA(object):

    @classmethod
    def func_a(cls):
        print(type(cls), cls)


class BaseB(object):
    pass


class ClassA(BaseA, BaseB):
    pass


ClassA.func_a()

6、例項方法.

除靜態方法與類方法外,類的其他方法都屬於例項方法。例項方法需要將類例項化後呼叫,如果使用類直接呼叫例項方法,需要顯式地將例項作為引數傳入。最左側傳入的引數self,是例項本身。

class ClassA(object):

    def func_a(self):   #只有一個引數是self,沒有別的引數,呼叫函式的時候直接呼叫print方法

    # 使用例項呼叫例項方法
ca = ClassA()
ca.func_a()
    # 如果使用類直接呼叫例項方法,需要顯式地將例項作為引數傳入
ClassA.func_a(ca)

繼承類定義

單繼承

class Person(object):   # 定義一個父類
 
    def talk(self):    # 父類中的方法
        print("person is talking....")  
 
 
class Chinese(Person):    # 定義一個子類, 繼承Person類
 
    def walk(self):      # 在子類中定義其自身的方法
        print('is walking...')
 
c = Chinese()
c.talk()      # 呼叫繼承的Person類的方法
c.walk()     # 呼叫本身的方法

子類對父類方法的重寫  與  建構函式的繼承

class Person(object):
 
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.weight = 'weight'
 
    def talk(self):
        print("person is talking....")
 
class Chinese(Person):
 
    def __init__(self, name, age, language): 
        Person.__init__(self, name, age) #super(Chinese,self).__init__(name,age)
        self.language = language
        print(self.name, self.age, self.weight, self.language)
 
    def talk(self):  # 子類 重構方法
        print('%s is speaking chinese' % self.name)
 
    
c = Chinese('bigberg', 22, 'Chinese')
c.talk()

還可以多重繼承

class sample(speaker,student):