1. 面向对象初识

1.面向过程编程vs函数式编程
    减少了重复代码
    增强了可读性
2.函数式编程vs面向对象编程
 面向对象的第一个优点:
    对相似功能的函数,同一业务下的函数进行归类,分类
 面向对象的第二个优点:
    站在上帝的角度构建代码,类就是一个公共的模板,对象就是从模板中实例化出来的,得到对象就是得到了一切.

类:具有相同属性和功能的一类事物
对象:某个类的具体表现

2. 面向对象的结构

类名:驼峰体,不要使用下划线
class Human:  # (Human后面的括号可以有(继承),也可以没有,没有的话默认继承object)
    mind = '有思想'   #  1.类的属性(静态属性/静态字段)
    def work(self):   # 2.动态方法
        print("人类都会工作")

3. 从类名的角度研究类

3.1 类名操作类中的属性

1.类名查看类中的所有方法
    print(类名.__dict__)
    
2.类名操作类的静态属性,万能的点.
    增:Human.body = "有头"
    删:del Human.mind
    改:Human.mind = "无脑"
    查:Human.language

3.2 类名调用类中的方法

一般类中的方法,不会通过类名调用

总结:一般类名就是操作类中的属性

4. 从对象的角度研究类

4.1 实例化一个对象发生的三件事(非常重要)

对象是从类中出来的,只要是类名加上(),这就是一个实例化过程,这个就会实例化一个对象

1.通过object的__new__方法,产生并返回一个内存空间。
2.自动执行类中的__init__方法,并将这个对象空间(内存地址)传给了__init__方法的第一个位置参数self。
3.在__init__ 方法中通过self给对象空间封装属性。

4.2 对象操作对象空间的属性

1.对象查询对象中所有属性。 对象.__dict__
2.对象操作对象中的单个属性。 万能的点 .

4.3 对象查看类中的属性 (注意:只能查看,不能更改)

class Human:

   mind = '有思想'
   language = '汉语'
   def __init__(self,name,sex,age,hobby):
       self.n = name
       self.s = sex
       self.a = age
       self.h = hobby

obj = Human('张三','男',18,'运动')
print(obj.mind)
print(obj.language)
obj.a = 666
print(obj.a)

4.4 对象查看类中的方法

类中的方法一般都是通过对象执行的(除去类方法,静态方法外),并且对象执行这些方法都会自动将对象空间传给方法中的第一个参数self。

class Human:
   mind = '有思想'
   language = '汉语'
   def __init__(self,name,sex,age,hobby):
       self.n = name
       self.s = sex
       self.a = age
       self.h = hobby

   def work(self):
       print(self)
       print('人类会工作')

   def tools(self):
       print('人类会使用工具')

obj = Human('张三','男',18,'运动')
obj.work()
obj.tools()

5. self 是什么

self其实就是类中方法(函数)的第一个位置参数,只不过解释器会自动将调用这个函数的对象传给self。所以把类中的方法的第一个参数约定俗成设置成self, 代表这个就是对象

 

6. 一个类可以实例化多个对象

obj1= Human('张三','男',20,'美女')
obj2= Human('李四','男',18,'肥女')
print(obj1,obj2)
print(obj1.__dict__)
print(obj2.__dict__)