这几年一直在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
并且是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 # 无法访问
可以在一个已有的实例上,通过=
号赋值语句,进行创建一个新的实例变量