天天看點

Python筆記之類和對象

1.對象的概念,python中對象和其他程式設計語言中對對象的描述一樣,其主要包含對象的屬性和方法。屬性主要是對對象的靜态描述,而方法則即函數,描述“對象”的行為。

2.python中仍然是通過類來建立一個真正的對象,這個對象就叫做這個類的執行個體化。文法上,類名大寫開頭,函數名小寫開頭,其形式如下例所示:

class Turtle:
  color='green'
  legs=4
  def run(self):
     print('跑步')
  def sleep(self):
     print('睡覺')
           

這裡函數中的self類似于C++中的this指針。由同一個類可以生成多個對象,在一個對象調用方法時是會将自身的引用作為第一個參數傳給該方法。如下例所示,a、b兩個對象的self.name分别改變了,其調用的是各自自身的self。

class Turtle:
   def setName(self,name):
       self.name=name
   def sleep(self):
       print('%s在睡覺 %self.name')
>>a=Turtle()
>>b=Turtle()
>>a.setName('張三')
>>b.setName('李四')
>>a.sleep()
張三在睡覺
>>b.sleep()
李四在睡覺
           

3.python中存在構造函數_ _init_ _(),在執行個體化一個對象時便會自動調用該方法。執行個體化對象時是可以傳入參數的,這些參數會自動傳入到_ _init_ _()方法中。

class Turtle:
   def _ _init_ _(self,name):
       self.name=name
   def sleep(self):
       print('%s晚安' %self.name)
>>a=Turtle('中國')
>>a.sleep()
中國晚安
           

4.在C++和C#等程式設計語言中是通過private、public這樣的關鍵字來聲明私有和公有的,但在python中是通過在變量前添加雙下劃線_ _來聲明,且在類中定義的私有變量,在外部不能調用。

>>class Turtle:
  _ _color='green'
>>a=Turtle()
>>a._ _color
AttributeRrror:'person'object has no attribute '_ _color'
           

解決辦法為:在外部使用“_類名_ _變量名”即可通路雙下劃線開頭的私有變量了:

>>a._Turtle_ _color
green
           

5.python中的繼承原理和其他程式設計語言一樣,以下為例:

class human:
   eyes=2
   hands=2
   legs=2
   def run(self):
       print('跑步')
   def read(self):
       print('學習')
class man(human):
      pass
class felman(human):
      pass
>>a=man()
>>b=felman()
>>a.run()
跑步
>>b.read()
學習
           

注意:如果子類中定義與父類同名的方法和屬性,則會自動覆寫父類對應的方法和屬性。如果在重寫的方法中需要用到父類的方法,則需要先調用父類的該方法,一種簡便的方法為使用super函數:

class Turtle:
   def _ _init_ _(self):
   super()._ _init_ _()
   self.name='張三'
           

6.組合:使用多重繼承會容易引發代碼混亂,是以一般避免使用多重繼承,想達到同樣的效果,我們可以用組合的方式來實作,把需要的類放進行執行個體化即可。

class Fish:
  def _ _init_ _(self,x):
      self.num=x
class Dog:
  def _ _init_ _(self.y):
      self.num=y
class Animal:
  def _ _init_ _(self,x,y):
      self.fish=Fish(x)
      self.dog=Dog(y)
  def sum(self):
       print('%s條魚和%s隻小狗 %self.fish.num.%self.dog.num')
>>aa=Animal(3,6)
>>aa.sum()
3條魚和6隻小狗