Python11--面向對象2

  • 隱藏屬性
  1 class Dog:
  2     def setAge(self,age):
  3         if age >0 and age <100:
  4             self.age = age
  5         else:
  6             self.age = 0
  7
  8     def get_age(self):
  9         return self.age
 10
 11 dog = Dog()
 12
 13 dog.setAge(-20)
 14 print(dog.get_age())
 15
 16 dog.setAge(10)
 17 print(dog.get_age())

  • 私有方法
  1 class Dog:
  2
  3     # 私有方法 加 __
  4     def __test(self):
  5         print('十八年後再來')
  6
  7     def test(self,age):
  8         if age <18:
  9             self.__test()
 10         else:
 11             print('已成年')
 12
 13 dog = Dog()
 14 dog.test(10)
 15 print('='*40)
 16 dog.test(20)

  • __del__方法
  1 class Dog:
  2     被殺死前調用,就是引用計數爲0時
  3     def __del__(self):
  4         print('over')
  5
  6
  7 dog1 = Dog()
  8 dog2 = dog1
  9
 10 print('-'*10)
 11 del dog1
 12 print('-'*10)
 13 del dog2
 14 print('-'*10)

  • 繼承
父類——子類
私有的並不會被繼承

  1 class Animal:
  2     def eat(self):
  3         print('吃')
  4
  5     def drink(self):
  6         print('喝')
  7
  8     def sleep(self):
  9         print('睡')
 10
 11 #在類名後加上(父類)
 12 #父類的方法,子類可以用
 13 #同一父類下的子類,方法不可以相互調用
 14 class Dog(Animal):
 15     def bark(self):
 16         print('汪汪')
 17
 18 class Cat(Animal):
 19     def catch(self):
 20         print('抓老鼠')
 21
 22 wangcai = Dog()
 23 wangcai.eat()
 24
 25 tom = Cat()
 26 tom.eat()
 27
 28 class XiaoTian(Dog):
 29     def fly(self):
 30         print('飛')
 31     #重寫,即重寫父類的方法,調用時,會調用自己的方法文不會調用父類的
 32     def eat(self):
 33         print('吞')
 34         #調用被重寫的父類的方法
 35         Animal.eat(self)
 36
 37 # 子類可以調用爺爺的方法,子子孫孫都可以用長輩的方法
 38 xiaoTianQuan = XiaoTian()
 39 xiaoTianQuan.fly()
 40 xiaoTianQuan.bark()
 41 xiaoTianQuan.eat()

  • 多繼承
  1 class Base(object):
  2     def test(self):
  3         print('--Base')
  4
  5 class A(Base):
  6     def test1(self):
  7         print('--test1')
  8
  9     def test(self):
 10         print('A')
 11 class B(Base):
 12     def test2(self):
 13         print('--test2')
 14
 15     def test(self):
 16         print('B')
 17 class C(A,B):
 18     def test(self):
 19         print('--test3')
 20
 21
 22 c =C()
 23 c.test1()
 24 c.test2()
 25 # 優先會在C中去找,之後A之後B之後Base,當找到後就會停止查找
 26 c.test()

  • 多態
多態:定義時的類型和運行時的類型不一樣,此時就成爲多態 
  1 class Dog(object):
  2     def print_self(self):
  3         print('大家好,我是***')
  4
  5 class xiaoTian(Dog):
  6     def print_self(self):
  7         print('hello everybody,我是神獸')
  8
  9 def introduce(temp):
 10 #此方法並不確定調用調用誰的方法,這就是多態                   
 11     temp.print_self()
 12
 13 dog1 =Dog()
 14 dog2 =xiaoTian()
 15
 16 introduce(dog1)
 17 introduce(dog2)

  • 類屬性、實例屬性
  1 class Tool(object):
  2 #屬性
  3     num = 0 #類屬性
  4 #方法
  5     def __init__(self,new_name):
  6         self.name = new_name
  7         Tool.num +=1
  8
  9 tool1 = Tool('錘子')
 10 tool2 = Tool('電鋸')
 11 tool3 = Tool('鐵鍬')
 12 print(Tool.num)

  • 實例方法、類方法、靜態方法
  1 class Game(object):
  2     #類屬性
  3     num = 0
  4
  5     #實例方法
  6     def __init__(self):
  7         #實例屬性
  8         self.name = '小米'
  9
 10     #類方法
 11     @classmethod
 12     def addNum(cls): #cls 是class 的縮寫
 13         cls.num = 10
 14
 15     #靜態方法
 16     @staticmethod
 17     def printMenu():
 18         print('-'*40)
 19
 20 game = Game()
 21 Game.addNum()#用類名來調用類方法
 22 print(Game.num)
 23 game.addNum()#用對象來調用類方法
 24 print(Game.num)
 25
 26 Game.printMenu()#用類名調用靜態方法
 27 game.printMenu()#用對象調用靜態方法
發佈了46 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章