Python中的面向对象编程(类编程)由简单到复杂的示例代码
Posted 昊虹图像算法
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
以上是关于Python中的面向对象编程(类编程)由简单到复杂的示例代码的主要内容,如果未能解决你的问题,请参考以下文章