Python面向对象类和变量
2021/10/19 11:10:31
本文主要是介绍Python面向对象类和变量,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题
于是乎,我自己开发了一款面试宝典,希望能帮到大家,也希望有更多的Python新人真正加入从事到这个行业里,让python火不只是停留在广告上。
微信小程序搜索:Python面试宝典
或可关注原创个人博客:https://lienze.tech
也可关注微信公众号,不定时发送各类有趣猎奇的技术文章:Python编程学习
面向对象
对象是什么:对象就是一个模型
在我们生活中,有许许多多的对象
比如,所有的楼房可以看作一类对象,不管是平房还是高层,都叫楼房
还有面,山西的刀削面,担担面,等等,都需要水煮,有的还可能给你加个鸡蛋,叫做鸡蛋面
对象是我们宏观意义上把一类具有相同属性的事物去总结称呼他,这个总结归纳出来的就是对象
对象是有公有属性,也有一些自己独有的;
比如平房没有电梯,高层没有院子,但是都有门。或者我们的加蛋的面,面条是面这个对象必须有的,但是鸡蛋就不一定了。
类和实例
-
类:是我们抽象出来的属性集合,是描述
-
实例:对象是我们用类这个属性集合具体实例生成的,也叫做实例
不管是类还是示例,都会有自己的属性,属性可以是函数也可以是变量
- 注意:类中的函数经常叫做方法,本质和函数一样
-
实例属性:定义在方法中的属性(属性可以是方法函数也可以是变量),只作用于当前实例的类
-
类属性:类属性在整个实例化的对象中共有的,类属性定义在类中且在函数体外,类属性通常不作为实例属性使用
创建一个简单的类
使用class语句来创建一个新类,class之后为类的名称并以冒号结尾
class A: """welcome to use this func""" # 这个地方我们是一个帮助文档 pass a = A() # 使用类名加小括号创建实例 help(a)
A是类,a是实例
变量
类中变量
class A: num = 1
直接定义在类中的变量属性,就是类中变量
类中变量可以直接类访问
A.num
也可以被实例直接访问
a,b = A(),A() a.num b.num
类修改类中变量
通过类修改类中变量,其余实例拿到的都是被修改后的变量,大家都会变
A.num = 2 a.num 2 b.num 2
实例修改类中变量
某个实例直接修改类中变量,会直接将该变量声明为当前修改实例所独有的,并不会影响他人
a.num = 3 a.num 3 b.num 2
实例对于不可变变量的修改和赋值,会直接将当前变量私有化
而可变对象,比如列表,对于这样的数据进行修改,会影响全局,因为这是个引用
实例变量
__init__(self)
是一种特殊的方法,专门用在类中,称为类的初始化方法,当你创建一个类的实例的时候就会调用这个方法;该方法也支持重写,如果你没没有重写自己的构造函数,系统会有默认的构造函数用来执行。不需要我们显示的调用,这个函数在生成实例的过程中为实例初始化数据
实例创建完我们就希望拥有的变量,可以在__init__
方法中进行初始化定义
class A: def __init__(self): self.a = 1
- 注意:
__init__
方法不允许有返回值
self指针
self
指向了抽象出来的一个实例,在类中定义参数时,如果你的这个函数只能是实例出来的实际对象可用,那么你需要加一个self
加了这根指针的意义也在于,如果你同一个类实例出来了多个对象,每个对象都含有一个相同的函数方法,如果你不明确标识这个方法是属于哪个对象的,那么会造成混乱,所以语言发明的人就发明了这个跟self指针,用来指向你当前实例出来的类对象
self
并且是python
类默认把第一个参数当作这个指向类实例的参数,如果你这里定义成其他字符也是OK
的
注意,self
是约定俗成的一种写法,我们也可以把这个位置的参数命名为别的样子,但是阅读性可能会差
class A: def __init__(self): self.l = l
- 类访问实例属性
l
A.l # AttributeError: type object 'A' has no attribute 'l'
实例变量只能有当前实例访问
- 实例修改
class A: def __init__(self,l): self.l = l l = [1] # 全局可变对象 # ------------ a = A(l) b = A(l) a.l[0] = 'a' # 实例进行修改 print(a.l) ['a'] print(b.l) ['a']
通过同一个可变对象创建的实例变量,某个实例进行修改,全局共享修改状态
class A: def __init__(self): self.l = [1] # 函数内定义的实例可变变量 a = A() b = A() a.l[0] = 'a' # 实例进行修改 print(a.l) print(b.l)
很好理解,本身在
init
方法里定义变量,就已经不是共享,每个实例都是单独的调用init
方法,那么生成的私有化属性互相修改是绝不影响的
猴子补丁
猴子补丁是一种让程序行为在运行时拓展或变更的方法,同时也是一种实例运行期间进行实例变量创建的方式
class A: pass a = A() a.num = 1 b = A() b.num # 无法访问
可以在一个已有的实例上,通过=
号赋值语句,进行创建一个新的实例变量
- 注意:实例变量是实例所私有的,如果这个变量不是一个全局传参的可变对象
这篇关于Python面向对象类和变量的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例
- 2024-11-07Python编程基础指南
- 2024-11-06Python编程基础入门指南
- 2024-11-06怎么使用python 计算两个GPS的距离功能-icode9专业技术文章分享