“介绍Python中面向对象编程的方法,包括类的定义、使用、继承、实例化和导入方法等。”
01 面向对象编程
所谓面向对象编程,指的是把现实世界中的事物或者情景抽象成具有相同行为的对象,给这些对象设置一些属性和行为模式,然后去调用对象的某些属性和行为。
除了面向对象编程,还有一种是面向过程编程。面向过程编程是把事物按照顺序分成不同的步骤,对每个步骤进行编程。举个简单的例子,把大象放冰箱需要几步?按照面向过程编程,需要三步,把冰箱门打开,把大象塞进去,把冰箱门关上。按照面向对象编程,则需要定义冰箱的属性和行为,冰箱可以被打开,也可以被关上。还需要定义人的属性和行为,人可以移动某个东西。定义好之后我们调用人和冰箱的行为就可以把大象塞进冰箱。
从这个例子可以看出来,面向过程编程一般具有更高的效率,而面向对象编程则具有更好的复用性、拓展性和可维护性。常用的编程语言中,C语言采用面向过程编程方法,而Java、Python等则以面向对象编程为特色。
02 类的创建
在Python中,类的创建通过class来进行,如:
# -*- coding:utf-8 -*-
class Dog():
""" 一次模拟小狗的简单尝试"""
def __init__(self,name,age):
"""初始化属性name和age"""
self.name = name
self.age = age
def sit(self):
"""模拟小狗被命令时蹲下"""
print(self.name.title() + " is now sitting.")
def roll_over(self):
"""模拟小狗被命令时打滚"""
print(self.name.title() + " rolled over!")
上面的代码定义了一个名为Dog的类,同时在类中定义了3个方法,用来模拟Dog类的属性和行为。第一个方法是默认的,用来表示类的属性,名称是__init__(self,*),其中*号表示形参,即你需要外部输入的变量。第二个和第三个方法分别用来模拟Dog类的“蹲下”和“打滚”行为,每个方法的括号开头都是self,用来传递实例自身。如果方法需要输入外部变量的话,可以在self后增加形参。
03 类的使用
在使用类的时候,我们首先将其实例化,然后就可以使用类及类中的方法了。如:
# -*- coding:utf-8 -*-
class Dog():
""" 一次模拟小狗的简单尝试"""
def __init__(self,name,age):
"""初始化属性name和age"""
self.name = name
self.age = age
def sit(self):
"""模拟小狗被命令时蹲下"""
print(self.name.title() + " is now sitting.")
def roll_over(self):
"""模拟小狗被命令时打滚"""
print(self.name.title() + " rolled over!")
my_dog = Dog("皮皮",3)
my_dog.sit()
my_dog.roll_over()
在上面代码中,第18行创建了Dog类的一个实例,名为my_dog。“皮皮”和3对应着Dog类的属性name和age。当创建完实例后,这个实例通过形参self传递到方法sit和roll_over中,因此这个实例可以使用这两个方法。如19行和20行的my_dog.sit()和my_dog.roll_over()。注意方法最后需要加括号哈。输出结果如下:
皮皮 is now sitting.
皮皮 rolled over!
04 类的继承和实例化
当你创建完一个类之后,想把这个类的属性和方法传递给另外一个类,该怎么做呢?这涉及到类的继承。类的继承方法如下所示:
# -*- coding:utf-8 -*-
class Dog():
""" 一次模拟小狗的简单尝试"""
def __init__(self,name,age):
"""初始化属性name和age"""
self.name = name
self.age = age
def sit(self):
"""模拟小狗被命令时蹲下"""
print(self.name.title() + " is now sitting.")
def roll_over(self):
"""模拟小狗被命令时打滚"""
print(self.name.title() + " rolled over!")
class ErHa(Dog):
"""创建二哈的类,继承Dog的属性和方法"""
def __init__(self,name,age):
"""继承Dog的属性"""
super().__init__(name,age)
my_dog = ErHa("肥肥",3)
my_dog.sit()
my_dog.roll_over()
输出结果如下所示:
肥肥 is now sitting.
肥肥 rolled over!
也可以为子类增加属性和方法:
# -*- coding:utf-8 -*-
class Dog():
""" 一次模拟小狗的简单尝试"""
def __init__(self,name,age):
"""初始化属性name和age"""
self.name = name
self.age = age
def sit(self):
"""模拟小狗被命令时蹲下"""
print(self.name.title() + " is now sitting.")
def roll_over(self):
"""模拟小狗被命令时打滚"""
print(self.name.title() + " rolled over!")
class ErHa(Dog):
"""创建二哈的类,继承Dog的属性和方法"""
def __init__(self,name,age):
"""继承Dog的属性"""
super().__init__(name,age)
self.feature = '精力充沛'
def character(self):
"""打印二哈的特点"""
print("二哈的特点是"+self.feature)
my_dog = ErHa("肥肥",3,'精力充沛')
my_dog.sit()
my_dog.roll_over()
my_dog.character()
输出结果是:
肥肥 is now sitting.
肥肥 rolled over!
二哈的特点是精力充沛
在第25行,设置了二哈类的默认属性,也可以按照一般的方法设置属性:
def __init__(self,name,age,feature):
"""继承Dog的属性"""
super().__init__(name,age)
self.feature = feature
除了继承之外,还有另一种传递类的方法的形式,称为实例化。如下所示:
# -*- coding:utf-8 -*-
class Dog():
""" 一次模拟小狗的简单尝试"""
def __init__(self,name,age):
"""初始化属性name和age"""
self.name = name
self.age = age
def sit(self):
"""模拟小狗被命令时蹲下"""
print(self.name.title() + " is now sitting.")
def roll_over(self):
"""模拟小狗被命令时打滚"""
print(self.name.title() + " rolled over!")
class BigDog():
"""创建大狗的类"""
def __init__(self):
"""创建大狗的属性"""
self.size = '大'
def dog_size(self):
"""打印大狗的体型"""
print('这种狗的体型很'+self.size)
class ErHa(Dog):
"""创建二哈的类,继承Dog的属性和方法"""
def __init__(self,name,age,feature):
"""继承Dog的属性"""
super().__init__(name,age)
self.feature = feature
self.size = BigDog()
def character(self):
"""打印二哈的特点"""
print("二哈的特点是"+self.feature)
my_dog = ErHa("肥肥",3,'精力充沛')
my_dog.sit()
my_dog.roll_over()
my_dog.character()
my_dog.size.dog_size()
我们首先创建了一个名为BigDog的类,然后把它作为实例,传递到ErHa类当中去。对应的代码是第38行。输出结果如下所示:
肥肥 is now sitting.
肥肥 rolled over!
二哈的特点是精力充沛
这种狗的体型很大
05 类的导入
当我们在某个Python文件里面定义好了类之后,如果在新的Python文件里面需要用到这些类,那么我们可以去导入这些类。常用的导入方法有:
from A import B
from A import B,C,D
import A
from A import *
上面代码中,A代表Python文件,B代表类。
第一种是从文件A中导入类B;
第二种是从文件A中导入类B、类C和类D;
第三种是导入文件A的所有类,需要按照A.B、A.C的格式去使用A的类;
第四种是导入文件A的所有类,按正常方法使用类即可,不需要带前缀。
不太建议使用第四种方法,因为首先其他方式可以很明显的知道导入了哪些类,另外其他方法不容易由于类的同名而引发错误。
感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典