前言
学无止境,无止境学。大家好,我是张大鹏,之前在抖音有5万多粉丝,不过现在不拍视频,专心写公众号了。笔者目前是高级Python工程师,之前是全栈工程师,主要擅长Golang和Python开发,对于Java,Vue,React也有一些研究。工作之余,喜欢学习和分享,希望能够通过此公众号”张大鹏520″,将自己学到的东西分享给大家,和大家一起交流,一起成长,一起进步。
今天要给大家分享的是《Python零基础入门教程09 面向对象》,这是一个系列的教程,从零基础到项目实战。在本教程中,我会给大家介绍Python中面向对象的相关知识。比如类的定义,类的属性,魔法方法,封装性,继承性,多态性等。还会配套相关的练习,大家学完以后可以自行通过练习题巩固和加深对知识点的理解。
如果大家需要本教程的PDF电子书或者完整的源码,可以在文末找到获取方式哈。
01 面对对象基础
类的定义
面向对象的核心是类,类是对象的抽象,对象是类的实例。关于类,需要记住以下基本用法:
-
class 类名
:声明一个类 -
c = 类名()
:使用类创建一个对象 -
c.方法名()
:调用类的方法
示例代码:
# `class 类名`:声明一个类
class Person:
"""声明一个类"""
def eat(self):
"""声明类的方法,方法的第一个参数一般都是self"""
print("人类都吃大米饭吗")
# `c = 类名()`:使用类创建一个对象
c = Person()
print(c, type(c))
# `c.方法名()`:调用类的方法
c.eat()
类的属性
一个类除了有很多方法,还会有很多属性。属性是一种抽象特征。比如人类,我们可以认为有姓名,年龄,性别等属性。如果你玩过游戏,游戏里面的角色有血条,蓝量,技能CD等,这些都属于属性。
对于属性,需要记住以下操作:
-
属性名 = 属性值
:定义属性 -
对象名.属性名
:获取属性值 -
对象名.属性名 = 属性值
:修改属性值
示例代码:
class Person:
# `属性名 = 属性值`:定义属性
name = "张大鹏"
age = 22
gender = "男"
# `对象名.属性名`:获取属性值
p = Person()
print(p.name, p.age, p.gender)
# `对象名.属性名 = 属性值`:修改属性值
p.name = "李思思"
p.gender = "女"
print(p.name, p.age, p.gender)
输出结果:
张大鹏 22 男
李思思 22 女
魔法方法
在Python中,类中使用__xxx__
类似的带双下划线的方法被称作魔法方法。魔法方法会被Python在特定的时候自动执行,其中最常见的是__init__
方法,用于在类实例化的时候自动调用,常用于初始化类的属性。
示例代码:
class Person:
# `属性名 = 属性值`:定义属性
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
# `对象名.属性名`:获取属性值
p = Person("张大鹏", 22, "男")
print(p.name, p.age, p.gender)
# `对象名.属性名 = 属性值`:修改属性值
p.name = "李思思"
p.gender = "女"
print(p.name, p.age, p.gender)
输出结果:
张大鹏 22 男
李思思 22 女
__str__
方法
魔法方法__str__
用于在调用类似print(对象)
方法的时候,查看类的字符串表示时自动执行,要求返回一个字符串。
示例代码:
class A:
def __str__(self):
return "我是一个A类"
a = A()
print(a)
输出结果:
我是一个A类
__del__
方法
魔法方法__del__
用于在调用del 对象
删除对象的时候自动执行,一般用于释放资源。
示例代码:
class A:
def __del__(self):
print("释放相关的资源")
a = A()
del a
输出结果:
释放相关的资源
02 面对对象高级
类的继承
面向对象有三大特性,封装,继承,多态。在Python中,类不仅可以单继承,还可以多继承。
单继承的语法如下:
class A(B):
pass
多继承的语法如下:
class A(B,C):
pass
示例代码:
class C:
def show(self):
print("ccccc")
class B:
def show_b(self):
print("bbbbbbbb")
# 单继承
class A1(B):
pass
# 多继承
class A2(B, C):
pass
if __name__ == '__main__':
# 类继承以后自动拥有父类的属性和方法
a1 = A1()
a1.show_b()
a2 = A2()
a2.show()
a2.show_b()
输出结果:
bbbbbbbb
ccccc
bbbbbbbb
方法重写
如果子类和父类方法同名了,默认调用子类的方法。此时如果又想要使用父类的方法,则可以对父类方法进行重写,在父类方法执行的前后添加逻辑,形成子类的方法。
示例代码:
class A:
def show(self):
print("AAAAAAAAAA")
class B(A):
def show(self):
"""重写父类方法"""
print("父类方法执行前。。。")
# 调用父类的方法
super().show()
print("父类方法执行后。。。")
if __name__ == '__main__':
b = B()
b.show()
输出结果:
父类方法执行前。。。
AAAAAAAAAA
父类方法执行后。。。
封装性
面向对象除了继承性,还有封装性。封装性指的是对属性进行封装,然后公开方法进行访问。这样做的效果是,能够在调用者修改属性的前后进行校验,确保安全。Python中可以通过给属性添加双下划线self.__属性=值
来实现属性的封装。
示例代码:
class Person:
def __init__(self, name):
# 私有属性
self.__name = name
# 提供公开方法
def set_name(self, name):
self.__name = name
def get_name(self):
return self.__name
if __name__ == '__main__':
p = Person("张大鹏")
print(p.get_name())
p.set_name("李思思")
print(p.get_name())
输出结果:
张大鹏
李思思
多态性
多态指的是同一个对象,在不同的时间,是不同的实现类对象。这个在Java这样的纯面向对象语言中比较舒服,不过Python这样的动态语言,变量本来就可以随便被修改,这个特性就显得没那么重要了。不过Python也能实现多态性。
示例代码:
class Dog:
pass
class DogA(Dog):
def show(self):
print("Dog aaaaa")
class DogB(Dog):
def show(self):
print("Dog bbbbbb")
def show(d: Dog):
d.show()
if __name__ == '__main__':
# 这里参数是Dog父类,但是调用的时候,可以传任何子类
# 体现了多态性
show(DogA())
show(DogB())
输出结果:
Dog aaaaa
Dog bbbbbb
类方法
类方法指的是可以通过类名调用的方法,对象也可以调用类方法。Python中用@classmethod
修饰方法变为类方法,第一个参数是cls
而不是self
,cls
表示类对象。这里只是一种建议命名,你也可以把cls
改为其他符合命名规范的名字。
示例代码:
class A:
@classmethod
def show(cls):
print("类方法。。。")
if __name__ == '__main__':
# 通过类名调用
A.show()
# 通过对象调用
a = A()
a.show()
输出结果:
类方法。。。
类方法。。。
静态方法
静态方法也是可以通过类名和对象调用,使用@staticmethod
修饰。没有默认的第一个参数。静态方法中无法访问类属性和对象属性。
示例代码:
class A:
@staticmethod
def show():
print("静态方法")
if __name__ == '__main__':
A.show()
A().show()
输出结果:
静态方法
静态方法
结语
关注我不迷路,欢迎关注我的微信公众号”张大鹏520″,如果您对此文章感兴趣,欢迎点赞收藏,留言评论。
文中所有代码,只需要打赏20元,然后留言评论“已打赏”,即可获取哦。
本文的PDF电子书版,只需要打赏3元,然后留言评论“已打赏”,即可获取哦。
写文章不容易,不喜勿喷哈,如果有想要学编程,学项目,或者在工作中有项目难以单独完成需要提供帮助的同学,欢迎私信我哈。生活不易,想要利用学到的编程知识,业余赚点零花钱。
接项目:网站开发,APP开发,各种管理系统开发。
带徒弟:Python编程教学,Golang编程教学,前端编程教学。
谢谢您!!!
原文始发于微信公众号(张大鹏520):Python零基础入门教程09 面向对象
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/48532.html