Python入门学习之类的相关知识总结


Posted in Python onMay 25, 2021

前言

Python是面向对象的程序设计(Object Oriented Programming)。

面向对象的程序设计的一条基本原则是:

计算机程序由多个能够起到子程序作用的单元或者对象组合而成。

面向对象的程序设计的一个关键性概念是:

数据以及数据的操作(即函数方法)封装在一起。

这个概念对于接触C++的我来说已经很熟悉了。就是“类”Class。
Python完全支持所有面向对象的基本功能,比如:

“封装”、“继承”、“多态”以及对基类方法的“覆盖”或“重写”。

下面请由我慢慢道来。

一、类的定义和使用

在C++中,类是“结构体”的衍生。在Python中,类作为一个完全独立的概念出现。

1.类的定义:

class ClassName:
	......

2.初始化函数和self参数:【非常重要!!!!】

def __init__(self,a,b,......):
	self.变量1=a
	self.变量2=b
	......

①Python在初始化函数里定义“变量”。
当我们要使用这个类的时候,可以直接对初始化函数里的变量赋值。
当然,可以不写形参a,b等等,直接给变量赋值。
②self参数表征这个类。
在类中写函数(即方法)时,都必须传入self参数。之后会举例说明。

【由此,我们可以发现,python中的init初始化函数与C++中的构造函数如出一辙,其原理其实是一样的】

3.外部变量使用类:即调用类的初始函数

class A:
	def __init__(self,p,q):
		self.a=p
		self.b=q
		
example=A(1,2)  #调用初始化函数,传入形参p=1,q=2,此时标明example使用了A类
print(A.a)      #输出1
print(A.b)      #输出2

4.限制变量的适用范围:私有or公有

我们知道,C++类中的变量有public、protected和private三种。Python中当然也有,只是书写方式不同。
特别注意,private变量“类内”和“类外”的调用方法是不同的。
在类外获取private变量值的方法有两种:

①通过特定“接口”:即调用类内函数方法,在类内通过self实现对private变量的使用
②通过特殊方法:example._ ClassName(类名) __var(变量)

如果直接无脑调用private,程序出现AttributeError错误。当然也不能对直接对private变量进行该值和赋值的操作。

class A:
	def __init__(self,a,b,c):
		self.one=a      #没有修饰,等价于public
		self._two=b     #加一条下划线,等价于protected
		self.__three=c  #加两条下划线,等价于private
	def get_all(self):
		print(self.one)     #类内的调用方式:格式与定义相同
		print(self._two)
		print(self.__three)
		
example=A(1,2,3)
example.get_all()         #通过“接口”获取private值
print(example._A__three)  #通过特殊方法获取private值

以上就是基本知识,我们通过一个示例程序加深印象:

class Human:
    def __init__(self,name,height,weight,sex):
        self.name=name
        self._height=height
        self.__weight=weight
        self.sex=sex
    def get_info(self):
        print(self.name)
        print(self._height)   #类内部调用protected变量,加一个下划线
        print(self.__weight)  #类内部调用private变量,加两个下划线
        print(self.sex)
    def get_weight(self):   #接口:通过方法获得private变量值,相当于一个通道
        print("His(Her) weight is:")
        print(self.__weight)

DIONA=Human("diona",'150cm','50kg','female(♀)')
#通过类的内部函数访问变量并输出,可以正常使用private和protected属性的变量。
DIONA.get_info()

#height为protected属性,在类外调用时,要加一个下划线
print(DIONA._height)
#weight为private属性,在类外调用时,要用特殊的方法:xxx._Classname(类名)__varname(变量名)
print(DIONA._Human__weight)

#使用接口获得weight的值
DIONA.get_weight()

二、类的方法

类的方法分为“共有方法”、“私有方法”、“静态方法”和“类方法”。本文详细讲述后两者。

1.静态方法:
又称“非实例方法”,一般与实例无关的方法,用于其他方法顺带调用。使用之前最好用@ staticmethod 注释

2.类方法:
接受“类属性”的方法。至少要接受一个形参cls,但调用时不需要为cls传递值。最好用@ classmethod 注释。
p.s:何为“类属性”?就是不写在init函数中,直接写在类中的变量。

class A:
	one=0  #这个one是“类属性”
	def __init__(self):
		self.two=0   #这个two是“self属性”

3.实例方法:
就是使用self属性的一般方法。上面“一”中所写到的方法都是实例方法。

4.外部调用规则:
①实例方法:只能使用实例名。
②静态方法和类方法:可以使用实例名,也可以使用类名。

程序实例:

class Student:
    _number=0    #这个number是类属性,直接定义在类中,必须用类方法去调用
    def __init__(self,name,uid):
        self._name=name
        self._uid=uid
        Student._number+=1     #每初始化一次,学生人数加1
        #另外,调用类属性时,使用类名:ClassName.varname
        
    #实例方法:对self定义的变量操作
    def get_name(self):
        print(self._name)
    
    #静态方法:(非实例方法)一般与实例无关的方法,用于其他方法顺带调用。
    @ staticmethod 
    def pls(a,b):
        return a+b;
    
    @ classmethod
    #类方法:至少要接受一个形参cls,但调用时不需要为cls传递值
    def get_number(cls):   
        print(cls._number)

lwc=Student('lwc','20009100132')
gtj=Student('gtj','20009100128')
wxm=Student('wxm','20018900232')

#外部调用实例方法,使用实例名。不能用类名调用实例方法。
lwc.get_name()

#外部调用类方法,使用类名或者实例名。
Student.get_number()
lwc.get_number()

三、类的属性

类的属性通俗地讲就是“类中存放的变量”,一般有“类属性”和“self属性”两种。
类的属性在“二”中已经讲过,还有一个叫“动态增加属性”和“动态删除属性”的内容,实际运用较少,在此略讲了。

四、类中常用特殊方法

Python类有大量的特殊方法。之前讲的初始化函数就是“构造函数”,就是一个特殊方法。与其对应的“析构函数”__ deal __( )也是特殊方法。
下面罗列了大量的特殊方法:

Python入门学习之类的相关知识总结

到此这篇关于Python入门学习之类的相关知识总结的文章就介绍到这了,更多相关Python类内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
巧用Python装饰器 免去调用父类构造函数的麻烦
May 18 Python
Python多线程编程(三):threading.Thread类的重要函数和方法
Apr 05 Python
深入理解Python中的super()方法
Nov 20 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
Apr 02 Python
python 定时修改数据库的示例代码
Apr 08 Python
Python爬虫使用脚本登录Github并查看信息
Jul 16 Python
python控制nao机器人身体动作实例详解
Apr 29 Python
创建Django项目图文实例详解
Jun 06 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
Jul 07 Python
Python3监控疫情的完整代码
Feb 20 Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
Jun 06 Python
Keras:Unet网络实现多类语义分割方式
Jun 11 Python
python munch库的使用解析
May 25 #Python
python调试工具Birdseye的使用教程
浅谈Python numpy创建空数组的问题
May 25 #Python
python实现语音常用度量方法的代码详解
python基础学习之生成器与文件系统知识总结
May 25 #Python
Python实战之实现简易的学生选课系统
May 25 #Python
python 如何用terminal输入参数
May 25 #Python
You might like
PHP操作mysql数据库分表的方法
2016/06/09 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
2009/06/14 Javascript
Javascript基础教程之数组 array
2015/01/18 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
最棒的Angular2表格控件
2016/08/10 Javascript
JavaScript中apply方法的应用技巧小结
2016/09/29 Javascript
vue动态生成dom并且自动绑定事件
2017/04/19 Javascript
微信小程序中setInterval的使用方法
2017/09/29 Javascript
Vue2.0+ElementUI实现表格翻页的实例
2017/10/23 Javascript
在vue中使用css modules替代scroped的方法
2018/03/10 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
详解Next.js页面渲染的优化方案
2019/01/27 Javascript
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
2019/02/21 Javascript
Node.js中package.json中库的版本号(~和^)
2019/04/02 Javascript
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
2019/04/10 Javascript
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
[01:04]DOTA2上海特锦赛现场采访 FreeAgain遭众解说围攻
2016/03/25 DOTA
[02:23]2016国际邀请赛中国区预选赛wings晋级之路
2016/06/29 DOTA
python保存字符串到文件的方法
2015/07/01 Python
Python实现合并两个有序链表的方法示例
2019/01/31 Python
利用Python查看微信共同好友功能的实现代码
2019/04/24 Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
2019/07/19 Python
Python实现猜年龄游戏代码实例
2020/03/25 Python
Python实现密钥密码(加解密)实例详解
2020/04/26 Python
Python 读取位于包中的数据文件
2020/08/07 Python
营销与策划个人求职信
2013/09/22 职场文书
经济管理毕业生求职信
2014/03/15 职场文书
企业精细化管理实施方案
2014/03/23 职场文书
我读书我快乐演讲稿
2014/05/07 职场文书
艺术设计专业求职自荐信
2014/05/19 职场文书
2014最新党员批评与自我批评材料
2014/09/24 职场文书
导游词范文之颐和园/重庆/云台山
2019/09/10 职场文书
Python Django ORM连表正反操作技巧
2021/06/13 Python
Python 语言实现六大查找算法
2021/06/30 Python