程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python中的面向對象編程(類編程)由簡單到復雜的示例代碼

編輯:Python

關於本文代碼中的self的含義,大家可參考下面這篇博文:
https://blog.csdn.net/wenhao_ir/article/details/125384347

目錄

  • 01-最簡單的Python面向對象編程(類編程)示例代碼
  • 02-類中的成員函數引用類的成員變量的情況
  • 03-帶構造函數(初始化函數)的情況
  • 04-成員函數帶參數(不包括構造函數)
  • 05-類的繼承(父類與子類)
  • 一些與代碼規范化相關的建議

01-最簡單的Python面向對象編程(類編程)示例代碼

class Fruit:
color = 'red'
def taste(self):
return 'delicious'
apple = Fruit()
a_character = apple.color
b_character = apple.taste()
print('\na_character:{}'.format(a_character))
print('b_character:{}'.format(b_character))

運行結果如下圖所示:

02-類中的成員函數引用類的成員變量的情況

class Staff: # Staff為員工的意思
bonus = 30000 # bonus為津貼、獎金的意思
def salary(self): # salary為工資的意思
salary = 10000+self.bonus
return salary
zhang_san = Staff()
zhang_san_salray = zhang_san.salary()

運行結果如下所示:

03-帶構造函數(初始化函數)的情況

class Staff: # Staff為員工的意思
def __init__(self, bonus): # bonus為津貼、獎金的意思
self.bonus = bonus
def salary(self): # salary為工資的意思
salary = 10000+self.bonus
return salary
zhang_san = Staff(3000)
zhang_san_salray = zhang_san.salary()

運行結果如下:

04-成員函數帶參數(不包括構造函數)

class AnimalBaseClass:
def __init__(self, num):
self.animallegs = num
self.head_num = 0
def walk(self):
print('走')
def cry(self):
print('叫')
def get_legs_num(self):
print(self.animallegs)
def input_head_num(self, num2):
self.head_num = num2
def get_head_num(self):
print(self.head_num)
animal = AnimalBaseClass(4)
animal.input_head_num(1)
animal.get_legs_num()
animal.get_head_num()

上面的代碼中,成員函數input_head_num()是帶了參數的。
運行結果如下:

05-類的繼承(父類與子類)

class AnimalBaseClass:
def __init__(self, num):
self.animallegs = num
def walk(self):
print('走')
def cry(self):
print('叫')
def get_legs_num(self):
print(self.animallegs)
class BirdClass(AnimalBaseClass):
head_num = 1
def cry(self):
print('吱吱叫')
def run(self):
print('跑')
def get_head_num(self):
print(self.head_num)
piyo_suke = BirdClass(2)
piyo_suke.cry()
piyo_suke.run()
piyo_suke.get_legs_num()
piyo_suke.get_head_num()

在上面的代碼中,類BirdClass繼承於類AnimalBaseClass,它擁有類AnimalBaseClass的變量和成員函數。
運行結果如下:

當父類和子類都擁有同樣名稱的成員函數時,子類調用這個成員函數時會優先調用子類中成員函數,這個功能叫重寫(覆蓋),英文中的叫法叫“override”所以上面的代碼中語句

piyo_suke.cry()

的運行結果為“吱吱叫”,而不是“叫”。
不僅是一般的成員函數能被改寫,構造函數也可以在子類中重寫,比如下面的代碼:

class AnimalBaseClass:
def __init__(self, num):
self.animallegs = num
def walk(self):
print('走')
def cry(self):
print('叫')
def get_legs_num(self):
print(self.animallegs)
class BirdClass(AnimalBaseClass):
def __init__(self, num1, num2):
self.animallegs = num1
self.head_num = num2
def cry(self):
print('吱吱叫')
def run(self):
print('跑')
def get_head_num(self):
print(self.head_num)
piyo_suke = BirdClass(3, 1)
piyo_suke.cry()
piyo_suke.run()
piyo_suke.get_legs_num()
piyo_suke.get_head_num()

上面的代碼中,子類BirdClass的構造函數和父類AnimalBaseClass不一樣。
運行結果如下:

要注意,你的代碼中用到了哪些成員變量,你在構造函數就要注意把它初始化,否則調用時會出錯,比如下面這樣寫就不行:

class BirdClass(AnimalBaseClass):
def __init__(self, num2):
self.head_num = num2
def cry(self):
print('吱吱叫')
def run(self):
print('跑')
def get_head_num(self):
print(self.head_num)
piyo_suke = BirdClass(1)
piyo_suke.cry()
piyo_suke.run()
piyo_suke.get_legs_num()
piyo_suke.get_head_num()

上面的代碼中,成員函數get_legs_num()用到了成員變量animallegs,但是沒有進行初始化,所以在調用語句piyo_suke.get_legs_num()時會報下面這樣的錯:

一些與代碼規范化相關的建議

在代碼的書寫格式上注意以下幾點(非必須,但是這樣書寫出來的代碼漂亮好看且規范):

  • 成員變量與成員函數之間要有一個空行;
  • 成員函數與成員函數之間要有一個空行;
  • 類與主體代碼之間要有兩個空行;
  • 類與類之間也要有個兩個空行;
  • 類名用駝峰法命名(關於命名規則,可參考博文 https://blog.csdn.net/wenhao_ir/article/details/123117194);

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved