一:与面向过程编程的不同

  面向对象编程是主要是各个程序之间的交互执行,提高程序的拓展性,主要是对那些变化大的软件进行编程。

  面向过程编程只要对那些变化不大的编程。可以准确地预估程序执行的结果。

二:类的格式

class 类名:
类属性 = None
def __init__(self,对象属性):
self.对象属性 = 对象属性

def 方法名(self):
pass

实例 = 类名(参数)
实例.方法名()

  在定义一个实例的过程即执行了类中的__init__()方法,可以理解为__init()__()中的方法是对象私有的属性,而类中的方法是实例共有的方法。

  关于self,self是实例化过程中自动传给的参数,一般是谁实例化就代表谁

  

三:我们定义的类的属性到底存到哪里了?有两种方式查看
dir(类名):查出的是一个名字列表
类名.__dict__:查出的是一个字典,key为属性名,value为属性值

四:特殊的类属性
类名.__name__# 类的名字(字符串)
类名.__doc__# 类的文档字符串
类名.__base__# 类的第一个父类(在讲继承时会讲)
类名.__bases__# 类所有父类构成的元组(在讲继承时会讲)
类名.__dict__# 类的字典属性
类名.__module__# 类定义所在的模块
类名.__class__# 实例对应的类(仅新式类中)

五:总结

class 类名:
def __init__(self,参数1,参数2):
self.对象的属性1 = 参数1
self.对象的属性2 = 参数2

def 方法名(self):pass

def 方法名2(self):pass

对象名 = 类名(1,2) #对象就是实例,代表一个具体的东西
#类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法
#括号里传参数,参数不需要传self,其他与init中的形参一一对应
#结果返回一个对象
对象名.对象的属性1 #查看对象的属性,直接用 对象名.属性名 即可
对象名.方法名() #调用类中的方法,直接用 对象名.方法名() 即可

六:类的命名空间与对象的命名空间

  创建一类就是创建了一个名称空间,用来存储定义的所有名字,称为类的属性。

  类有两种属性:静态属性和动态属性

    •   静态属性就是直接在类中定义的变量
    •   动态属性就是定义在类中的方法

  类的静态属性是共享给所有的对象的。即有着相同的id号

>>>id(egg.role)
4341594072
>>>id(Person.role)
4341594072

  类的动态属性是绑定给所有的对象,即id号并不相同

>>>egg.attack
<bound method Person.attack of <__main__.Person object at 0x101285860>>
>>>Person.attack
<function Person.attack at 0x10127abf8>
对象的名称空间是自己的名称空间,在调用属性时会先在自己的名称空间中找,如果找不到会调用类中的,再找不到会找父类中的,一直找不到会报错

当对象中的静态属性被修改之后,会在对象的名称空间中新建一个名称空间,会先调用自己的

 七:类名的作用

(1)可以实例化

(2)类名.静态属性     查看修改静态属性

(3)类名.动态属性      不加括号,查看动态属性的命名空间

(4)类名不可以调用对象的属性