面向过程和面向对象

一、面向过程

    什么是面向过程:

      面向过程的核心就是过程,即解决问题的流程,例如将要将一直大象放入冰箱,首先得先打开冰箱门,然后将大象放入冰箱门,再关上冰箱门。

      一步一步的完成,类似于工厂的流水线一般。

    面向过程的优缺点

      优点:将复杂的问题流程化,继而简单化

      缺点:拓展性差,可维护性弱,修改其中的一部分可能就要在全部地方修改,牵一发而动全身

      应用场景:安装包的使用

二、面向对象

    什么是对象:

       在程序中,对象就是存放数据和函数的容器

    面向对象的的优缺点

      优点:拓展性强,可维护性强

      缺点:编程复杂度高

      应用场景:微信、qq

 

 

 

 

 

 

三、类的定义和对象的产生

     什么是类?

      在程序中,我们将一系列对象有相同的功能和数据,那么该多个对象就属于同一个类

     类与对象的关系

      在程序中,必须先定义类,调用类才会产生对象

     定义类时发生的事情

      在定义类时,会立即执行类体代码,然后产生一个该类的名称空间,把类体里的名字都放入到该名称空间中,将__dict__绑定给给类名称空间,该名称空间可以看成是一个字典。

      我们一般使用 class 来定义一个类,类的名字首字母都会采用大写

      class Student():

        pass

     调用类时发生的事情

      在调用类产生一个对象时,会产生一个对象的名称空间,将__dict__绑定给对象名称空间,该名称空间也可以看作是一个字典

      这个过程一般称之为对象实例化,一般会用到一个变量名,这个变量名就是一个实例,然后将对象赋值给变量名

 

 

 

四、给对象定制特有的属性

    

class People():
    # 对象中如有有需要传值的,可以使用魔术手法__init__, 在调用类时会直接执行该函数体代码,给对象增加需要的属性
    # 如果没有增加的属性,这一句可以不写
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

    def goHome(self):
        print('%s,%d岁,%s辍学回家' % (self.name, self.age, self.gender))

    def kanChai(self):
        print('%s,%d岁,%s砍柴' % (self.name, self.age, self.gender))

    def quXiFu(self):
        print('%s,%d岁,%s开车娶媳妇' % (self.name, self.age, self.gender))


# 实例化对象
people1 = People('老李', 18, '男')
people2 = People('校思豪', 12, '女')
people3 = People('唐浩', 22, '男')
# 使用类中的方法
people1.quXiFu()  # 老李,18岁,男开车娶媳妇
people2.goHome()  # 校思豪,12岁,女辍学回家
people3.kanChai()  # 唐浩,22岁,男砍柴

  

 五、属性的查找顺序

    属性的查找 

      对象的本质就是一个名称空间而已,对象名称空间是用来存放自己独有的名字或属性。
      类中存放的是所有对象共有的属性。
      所以会先从自己的对象中查找属性,如果没有的话就会去到产生对象的类中查找

    类属性与对象属性

      类属性:在类中写的属性就叫做类属性

      对象属性:在对象名称空间生成的就叫做对象属性

    类属性的查找

      1. 查 

           类名    属性名

        print(Student.school)

      2. 添加类属性

         类名     属性名     属性值

        Student.country = 'China'  

      3.修改类属性

        类名       属性名    属性值

        Student.school = 'BJ'

      4.删除类属性

          类名     属性名

        del Student.school

      5.调用方法

        Student.方法名()# 需要几个参数传几个参数

    对象属性的查找

      

      1. 查 

           对象名    属性名

          print(stu.name)

      2. 添加类属性

         对象名     属性名     属性值

         stu.name = 'mike'  

      3.修改类属性

        对象名       属性名    属性值

        stu.name = 'jerry'

      4.删除类属性

          对象名     属性名

        del stu.school

      5.调用方法

        stu.方法名()# 需要几个参数传几个参数

      ps:类中的方法  类可以调用,属性也可以调用,推荐对象来调用,因为对象来调用,会把自己当成第一个参数传递给函数

 

 

六、类与对象的绑定方法与静态方法(非绑定方法)

  

    对象的绑定方法:

      在类中没有被任何装饰器修饰的方法就是 绑定到对象的方法,这类方法专门为对象定制。

class Person:
    country = "China"

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def speak(self):
        print(self.name + ', ' + str(self.age))


p = Person('laowang', 18)
print(p.__dict__)  # {'name': 'laowang', 'age': 18}
p.speak()  # 使用对象调用类中的方法  不需要再传值,会自动将对象当成第一个参数传给方法
Person.speak(p)  # 使用类调用则需要添加第一个对象的参数

 

    类的绑定方法:  

      类中使用 @classmethod 修饰的方法就是绑定到类的方法。这类方法专门为类定制。通过类名调用绑定到类的方法时,会将类本身当做参数传给类方法的第一个参数

class Person:
    country = "China"

    def __init__(self, name, age):
        self.name = name
        self.age = age
    @classmethod
    def speak(cls):
        print(cls.country)


p = Person('laowang', 18)
print(p.__dict__)
p.speak()  # China 对象也可以调用该方法,但不推荐使用
Person.speak()  # China 绑定类后就可以自动将类名当作第一个参数传进去了 在用类使用该方法时就不需要传值了

  

     静态绑定(非绑定方法)

      有时候在方法里面用不到类或者对象里的属性,就不需要传参了,就可以使用@classmethod 修饰的方法,将该方法既不绑定给类名,也不绑定给对象名

class Person:
    country = "China"

    def __init__(self, name, age):
        self.name = name
        self.age = age

    @staticmethod
    def create_id():
        import uuid
        return uuid.uuid4()


p = Person('laowang', 18)

print(p.create_id())  # cbe23629-43a6-4910-ae5c-3f264244e234
print(Person.create_id())  # 64875abe-6401-4771-a4ed-90b982886ffe

    总结:

      

    绑定方法:

    1.  @clssmethod是一个装饰器,放在类中函数的上面,该函数就变成了类的绑定方法

    2.  类的绑定方法有类来调用,自动把类传过去,对象也可以调用,一般不用

    3.  类的绑定方法用在什么地方?, 不需要通过对象,只需要通过类就能完成某些事的时候,就把该方法定义为类的绑定方法

    非绑定方法:

    1.  @staticmethod是一个装饰器,放在类中函数的上面,该函数就变成了类的绑定方法
    2.  非绑定方法就是将普通方法放到了类的内部。

 

posted @ 2021-12-02 16:46  椰子皮0oo0  阅读(90)  评论(0)    收藏  举报
1