的类
类的定义
示例:
<代码>类人: 国家="中国" def __init__(自我、名字、年龄): self.name=名字 自我。年龄=年龄 def说话(自我,词): 打印(词)代码>
其中国家是类属性,即人类的静态属性,()为说话人类的函数属性,即类的动态属性~
类的实例化
对上述示例的类进行实例化:
,<代码>祝辞的在比;p=人(“猫”,18)#实例类化人,得到对象p 在在在p.name #调用对象p的名字属性 “猫” 在在在p.speak(“你好”)#调用对象p的绑定方法 你好代码>
类中的__init__方法用于初始化对象,而在类的是实例化过程中,对应类中第一个被调用的并不是__init__方法,第一个被调用的是__new__方法。在对象的初始化之前首先要创建对象,__new__方法正是用来创建这个对象~
类的实例化过程也可以通过如下语句来实现:
<代码>祝辞的在比;p=object.__new__(人)# __new__方法继承自对象类 在在在的人。__init__ (p,“小猫”,18) 在在在p.name “凯蒂”代码>
在Person类中重写__new__方法:
<代码>类人: 国家="中国" def __new__ (cls、名字、年龄): 打印(' __new__称为“) 返回超级(人,cls) . __new__ (cls) def __init__(自我、名字、年龄): self.name=名字 自我。年龄=年龄 def说话(自我,词): 打印(单词) p=人(“猫”,18)#实例化对象 打印(的名字:% s % p.name) #输出结果: __new__叫做 名称:凯蒂代码>
很明显__new__方法是先于__init__方法被调用的~
类的实例化过程大致步骤如下:
1, p=人(“猫”,18),会调用人类的__new__方法,并传递姓名和年龄参数
2, __new__方法会创建一个人类的对象并返回
3,最后利用这个对象调用类的__init__方法完成初始化,__init__方法的第一个参数是自我,对象在调用__init__方法时会将自己当做参数传递给这个自我。
注意:__init__方法没有返回值~,__init__方法仅完成对象的初始化工作~
自我是什么?
引用>
在类的内部,自我就是一个对象。使用对象调用方法时(对象的绑定方法),当前对象会被自动传递给自我,即自我表示调用该方法的对象~类属性的调用
<强>操作类的变量属性:强>
,<代码>祝辞的在比;的人。国家#调用类属性 “中国” 在在在的人。国家='美国' #修改类属性 在在在Person.country “美国” 在在在德尔的人。国家#删除类属性 在在在的人。国家#删除后无法再调用 回溯(最近的电话): 文件“& lt; stdin>”,1号线& lt; module> AttributeError:类型对象“人”没有属性“国家”代码>
<>强调用类的函数属性:强>
这里仅介绍绑定方法的调用(即第一个参数是自我的方法),类中的其他方法暂先不做介绍~
说()是类的函数属性,对象调用不需要传递自我参数(对象调用会自动完成自我参数传值,下面会介绍),若是类来调用,则需要手动传递这个自我参数,即需要传递一个人类的对象~<代码>类人: 国家="中国" def __init__(自我、名字、年龄): self.name=名字 自我。年龄=年龄 def说话(自我,词): 打印(单词) p=人(“猫”,18) p.speak(“你好”)#对象调用,会自动将对象p作为第一个参数传递给自己 的人。说话(p,你好”)#类调用需要手动传递自己的值 #输出结果: 你好 你好代码>类的名称空间
类名。__dict__用来查看一个类(或对象)的名称空间,可以这样理解。其实__dict__是类的一个内置属性,存储所有实例共享的变量和函数(类属性,方法等),类的__dict__并不包含其父类的属性。对象中的__dict__属性下面会介绍~
这里注意和dir()方法的区别,dir(类名或对象名)会返回一个类(或对象)的所有属性,包括从父类中继承的属性。<代码>人类的__dict__属性 {“__module__”:“__main__ ', #所处模块 “__init__”: & lt;功能的人。在0 x11023b378> __init__; # __init__方法 ‘说’:& lt;功能的人。在0 x11023b400>发言,#说话方法 “__dict__”: & lt;属性的__dict__ '人' objects>, #应该就是指类的__dict__属性,具体参阅:https://blog.csdn.net/lis_12/article/details/53519060 “__weakref__”: & lt;属性的__weakref__ '人' objects>, “__doc__”:没有}# #类说明文档简述Python中的类与对象