• Python 全栈开发:python初识面向对象


    一、面向对象

    面向过程编程
        核心是”过程“二字,过程指的是解决问题的步骤,即先干什么再干什么
        基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式
    
        优点:复杂的问题流程化、进而简单化
        缺点:可扩展性差
    面向过程

    优点:解决程序的扩展性,可扩展性强

    缺点:1.编程的复杂度高于面向过程

         2.可控性差,无法像面向过程一样精准的预测问题的处理流程与结果

    应用场景:需求经常变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方

    二、类和对象

    对象是特征与技能的结合体,那类就是一系列对象相同的特征与技能的结合体

    :具有相同属性特征的一类事物

    对象:具体的某一事物

    在现实世界中:先有对象,再有类

    在程序中:务必保证:先定义类,后调用类来产生对象

    程序中模板

    #1. 在程序中特征用变量标识,技能用函数标识
    #2. 因而类中最常见的无非是:变量和函数的定义
    #3. 在定义类的阶段会立刻执行类体内的代码,然后将产生的名字存放于类名称空间中
    #4. __init__ 不能有返回值

    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 #查看对象的属性,直接用 对象名.属性名 即可 对象名.方法名() #调用类中的方法,直接用 对象名.方法名() 即可

    注意点:

    1. 类中可以有任意python代码,这些代码在类定义阶段便会执行
    2. 因而会产生新的名称空间,用来存放类的变量名与函数名,可以通过 类名.__dict__查看
    3. 对于经典类来说我们可以通过该字典操作类名称空间的名字(新式类有限制),但python为我们提供专门的.语法
    4. 点是访问属性的语法,类中定义的名字,都是类的属性

    python为类内置的特殊属性

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

    python类定义阶段,每一个类的方法必须显示定义self

    ps:def  __init__(self):   这句话可以写也可以不写,只要有参数参进来的时候就必须得写
    
      def  方法名(self):这里的self必须得写

    三、类的实例化、对象的操作

    类实例化:调用类产生对象的过程称为类的实例化,实例化的结果是一个对象,或称为一个实例

    # 定义一个People类
    class People:
        def __init__(self,name,age,sex):
            self.name=name
            self.age=age
            self.sex=sex
    
        def run(self):
            print('%s is running' %self.name)
    

    # 实例化一个对象 obj obj = People('fixd',18,'male')

    实例化做的三件事:

    1. 先产生一个空对象
    2. 自动触发类内部的__init__函数的执行
    3. 将空对象,以及调用类括号内传入的参数,一同传给__init__,为对象定制独有的属性

    查看对象的名称空间(__dict__)

    print(obj.__dict__

    四、对象的操作

    print(obj.name) #查看 属性name的值
    obj.education='哈佛'  # 添加属性
    del obj.name    # 删除属性
    obj.age=19      # 修改属性值
    print(obj.__dict__) # 查看实例化对象的名称空间

    五、对象属性的查找顺序

    先找对象自己的名称空间----------->>类的名称空间

    1、类的数据属性:是给对象用的,而且直接共享给所有对象的用的,内存地址都一样

    # 定义一个People类
    class People:
        country = 'China'
        def __init__(self, name, age, sex):
            self.name = name
            self.age = age
            self.sex = sex
    
        def run(self):
            print('%s is running' % self.name)
    
    people1 = People('fixd01', 18, 'male')
    people2 = People('fixd02', 25, 'male')
    people3 = People('fixd03', 30, 'male')
    
    # 实例化三个对象
    people1 = People('fixd01',18,'male')
    people2 = People('fixd02',25,'male')
    people3 = People('fixd03',30,'male')
    
    # 查看country属性对应的 内存地址
    print(id(People.country))
    print(id(people1.country))
    print(id(people2.country))
    print(id(people2.country))
    
    
    
    ##############################
    #结果:id  值都是相同的
    #140238495738936
    #140238495738936
    #140238495738936
    #140238495738936
    类的数据属性是共享的

    2、类的函数属性:是给对象调用,但是绑定给对象的用的,绑定到不同的对象就是不同的绑定方法

    # 定义一个People类
    class People:
        country = 'China'
    
        def __init__(self, name, age, sex):
            self.name = name
            self.age = age
            self.sex = sex
    
        def run(self):
            print('%s is running' % self.name)
    
    # 实例化三个对象
    people1 = People('fixd01', 18, 'male')
    people2 = People('fixd02', 25, 'male')
    people3 = People('fixd03', 30, 'male')
    
    # 调用 run()方法
    people1.run()
    people2.run()
    people3.run()
    
    # 查看run 的内存地址
    print(people1.run)
    print(people2.run)
    print(people3.run)
    #
    
    ##############################
    #结果: 内存地址不同
    fixd01 is running
    fixd02 is running
    fixd03 is running
    
    
    ##############################
    #结果: 内存地址不同
    <bound method People.run of <__main__.People object at 0x7f1c487e3978>>
    <bound method People.run of <__main__.People object at 0x7f1c487e39e8>>
    <bound method People.run of <__main__.People object at 0x7f1c487e3a20>>
    类的函数(绑定方法)

     

    六、绑定方法的特殊之处

    1. 绑定给谁就应该由谁来调用
    2. 谁来调用就会把谁当做第一个参数传入

    七、一切皆对象

    在python3中统一了类与类型的概念,类即类型。

  • 相关阅读:
    定制化培养:破解企业人才之困
    IT毕业生需要具备的六种能力素质
    JAVA值传递or引用传递
    就业形势严峻 毕业生需练好“内功”
    如何改变mysql auto increment 步长和初始值
    python变量作用域
    关于python的lxml.html 的fromstring 函数
    python string 到date object
    python mysql 连接数据库 latin1 codec错误
    python 使用 mysqldb 批量插入数据
  • 原文地址:https://www.cnblogs.com/fixdq/p/8779204.html
Copyright © 2020-2023  润新知