面向对象编程 Ojbect-Oriented Programming

两种编程思想:
面向过程编程
  	最小单位是: 函数 function
面向对象的编程:
  	最小单位是: 类 class

什么是对象:
	对象是指现实中的物体或实体

什么是面向对象
	把一切看成对象(实例) 用各种对象之间的关系来描述事物

对象都有什么特征:
	对象有很多的属性(名词,形容词)
		姓名, 年龄, 性别, 头发颜色
	对象有很多行为(动作,动词)
		学习,吃饭,睡觉,踢球,工作

什么是类
	拥有相同属性和行为的对象分为一组,即为一个类
	类是用来描述对象的工具,用类可以创建此类的对象(实例)

示意:
车(类)  ---->  BYD E6(京A.88888)  实例
     \
      \-->  BMW X5(京B.00000)  对象(实例)

狗(类) ----> 小京巴(户籍号: 000001) 对象
    \
     \---> 导盲犬(户籍号:00002)  对象

int(类)  -----> 100 对象
       \
        \---> 200 对象

类的创建语句:

语法:
	class 类名(继承列表):
    	'''类的文档字符串'''
    	实例方法(类内的函数method)定义
    	类变量
    	类方法(@classmethod)
    	静态方法(@staticmethod)
作用:
	创建一个类
	类用于描述对象的行为和属性
	类用于创建此类的一个或多个对象(实例)
说明:
	类名必须是标识符
	类名实质是变量,它绑定一个类

构造函数

格式:
	类名([传参列表])
作用:
	创建这个类的实例对象,并返回此实例对象的引用关系

说明:
	对象(实例)可以调用类方法和实例方法
	对象(实例) 有自己的作用域和名字空间,可以为该实例添加
	实例变量(也叫实例属性)

实例方法(instance method)

定义格式:
	class 类名(继承列表):
    	def 实例方法名(self, 参数1, 参数2, ...):
        	'''方法的文档字符串'''
        	语句块
作用:
	用于描述一个对象的行为,让此类型的全部对象都拥有相同
	的行为
说明:
	实例方法的实质是函数,是定义在内类的函数
	实例方法至少有一个形参,第一个形参绑定调用此方法的实
	例,一般命名为'self'
实例方法的调用语法:
	实例.实例方法名(调用传参)
	或
	类名.实例方法名(实例, 调用传参)

实例属性 attribute (也叫实例变量)

每个实例可以用自己的变量来记录每个对象自己的数据,这个
变量称为实例变量

使用语法:
	实例.属性名

赋值规则:
	首次为属性赋值则创建此属性
	再次为属性赋值则改变此属性的绑定关系
作用:
	记录每个对象自身的数据

删除属性:

del 语句
	del 对象.实例变量名

del 语句总结:
	1)  删除变量         del a,b,c
	2)  删除列表中的元素  del L[0], L[0:3]
	3)  删除字典中的键    del d['name']
	4)  删除属性         del obj.name

初始化方法

作用:
	对新创建的对象添加属性
语法格式:
	class 类名(继承列表):
    	def __init__(self [,形参列表])
        	语句块
	注:[]代表其中的内容可省略
说明:
	1. 初始化方法的名必须是 '__init__' 不可改变
	2. 初始化方法会在构造函数创建实例后自动调用,且将实
   		例自身通过第一个参数self传入'__init__' 方法
	3. 构造函数的实参将通过__init__方法的参数列表传
   		入到__init__方法中
	4. 初始化方法内如果需要return 返回,则必须返回None

析构方法

格式:
	class 类名(继承列表):
    	def __del__(self):
        ....
作用:
	在此对象销毁前释放此对象所占用的资源
说明:
	析构方法在对象被销毁前被自动调用
	python语言建议不要在对象销毁时做任何事情,因为销毁
		的时间难以确定

预置实例属性
__dict__ 属性
	__dict__属性绑定一个存储此实例自身变量的字典

示例:

    class Dog:
        pass
    dog1 = Dog()
    print(dog1.__dict__)  # {}
    dog1.color = "白色"
    print(dog1.__dict__)  # {'color': "白色"}

__class__ 属性
__class__ 属性绑定创建此实例的类

作用:
	可以借助于此属性来访问创建此实例的类
  示例:
    class Dog:
       pass
    dog1 = Dog()
    print(dog1.__class__)
    dog2 = dog1.__class__()  #  Dog()

用于实例对象的函数:

isinstance(obj, class_or_tuple)  返回这个对象obj
  	是否是某个类的对象,或者某些类中一个类的对象.如果
  	是则返回True,否则返回False
type(obj)  返回对象的类型
示例:
   class Dog:
       pass
   dog1 = Dog()
   isinstance(dog1, Dog)  # True
   isinstance([1,2,3], Dog)  # False
   isinstance([1, 2, 3], (int, str))  # False
   isinstance([1, 2, 3], (int, str, list))#True
   type(dog1) is Dog  # True
11-05 16:27