简述Python中的类与对象

  Python中

的类

  

类的定义

  

示例:   

 <代码>类人:
  国家="中国"
  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中的类与对象