• 17.面向对象(一)


    一.面向对象的概念

    面向对象编程(Object-oriented Programming,简称 OOP),是一种封装代码的方法

    为什么要有面向对象:是为了更好地模拟现实世界的事物,并把描述特征的数据和代码块(函数)封装到一起

    比如说,将乱七八糟的数据扔进列表中,这就是一种简单的封装,是数据层面的封装;把常用的代码块打包成一个函数,这也是一种封装,是语句层面的封装。

    class Person:
    #比如人有一些属性,名字、性别、年龄等
        name = "Mewtwo"
        sex = ""
        age = 21
     
    #人有一些行为动作或者说方法
        def run(self):
            print("人会跑")#会跑
        def shop(self):
            print("人会购物")#会购物
        def sleep(self):
            print("人会睡觉")#会睡觉

    面向对象中,常用术语包括:

    • 类:可以理解是一个模板,通过它可以创建出无数个具体实例。比如,前面编写的 tortoise 表示的只是乌龟这个物种,通过它可以创建出无数个实例来代表各种不同特征的乌龟(这一过程又称为类的实例化)。
    • 对象:类并不能直接使用,通过类创建出的实例(又称对象)才能使用。这有点像汽车图纸和汽车的关系,图纸本身(类)并不能为人们使用,通过图纸创建出的一辆辆车(对象)才能使用。
    • 属性:类中的所有变量称为属性。例如,tortoise 这个类中,bodyColor、footNum、weight、hasShell 都是这个类拥有的属性。
    • 方法:类中的所有函数通常称为方法。不过,和函数所有不同的是,类方法至少要包含一个 self 参数(后续会做详细介绍)。例如,tortoise 类中,crawl()、eat()、sleep()、protect() 都是这个类所拥有的方法,类方法无法单独使用,只能和类的对象一起使用。

    二.类的定义

    Python 中使用类的顺序是:先创建(定义)类,然后再创建类的实例对象,通过实例对象实现特定的功能。

    如何创建一个类:

      class 类名(每个单词首字母大写,单词之间不用符号隔开):
         零个到多个类属性...(无先后顺序之分,相互之间可以调用)
         零个到多个类方法...(无先后顺序之分,相互之间可以调用)

    Python 的类定义由类头(指 class 关键字和类名部分)和统一缩进的类体构成,在类体中最主要的两个成员就是属性和方法。如果不为类定义任何属性和方法,那么这个类就相当于一个空类,如果空类不需要其他可执行语句,则可使用 pass 语句作为占位符。但是空类没有意义,所以比较少用

    定义一个类

    class Person :
        '''这是一个学习Python定义的一个Person类'''
        # 下面定义了一个类属性
        hair = 'black'
        # 下面定义了一个say方法
        def say(self, content):
            print(content)
    class 语句只能创建一个类,而无法创建类的对象,因此要想使用已创建好的类,还需要手动创建类的对象,创建类对象的过程又称为类的实例化。
      语法:类名(参数)
    案例:
      
    class Person :
        '''定义的一个Person类'''
        # 定义2个类变量
        name = "Mewtwo"
        age = "22"
        def __init__(self,name,age):
            #定义2个实例变量
            self.name = name
            self.age = age
            print("这个人的名字是:",name," 年龄为:",age)
        # 定义一个say实例方法
        def say(self, content):
            print(content)
    # 将该Person对象赋给p变量
    p = Person("Mewtwo",22)
    类对象的使用
    # 类名的角度
    #     # 操作类中的静态变量
    #         # 1, Person.__dict__ 查询类中的所有的内容 (不能进行增删改操作)
    # print(Person.__dict__)
    # print(Person.__dict__['faith'])
    # Person.__dict__['mind'] = '无脑'
    # print(Person.__dict__['mind'])
            # 2, 万能的  .  对类中的单个的变量进行增删改查,用 万能的 点
    # print(Person.mind)
    # print(Person.animal)  # 查
    # Person.money = '运用货币'  # 增
    # Person.mind = '无脑的' # 改
    # del Person.mind
    # print(Person.__dict__)
    #
    #     #操作类中的方法  (工作中基本不用类名去操作)
    # # Person.work(111)
    #
    # # 对象的角度
    # ret = Person()  # 类名+()的这个过程:实例化的过程(创建一个对象的过程),
    #           # Person() 实例化对象,实例,对象.
    # print(ret)
    # #1,只要类名+() 产生一个对象,自动执行类中的__init__方法.
    
    
    
    class Person:
        '''类体:两部分:变量部分,方法(函数)部分'''
        mind = '有思想'  # 变量,静态变量,静态字段
        animal = '高级动物'
        faith = '有信仰'
    
        def __init__(self,name,age,hobby):
            self.name = name  #  Person.money = '运用货币'
            self.age = age
            self.hobby = hobby
    
        def work(self):  # 方法,函数,动态变量
    
            print('%s都会工作...' %self.name)
        def shop(self):
    
            print('人类可以消费....')
    
    # 类名的角度
        # 操作类中的静态变量
            # 1, Person.__dict__ 查询类中的所有的内容 (不能进行增删改操作)
    # print(Person.__dict__)
    # print(Person.__dict__['faith'])
    # Person.__dict__['mind'] = '无脑'
    # print(Person.__dict__['mind'])
            # 2, 万能的  .  对类中的单个的变量进行增删改查,用 万能的 点
    # print(Person.mind)
    # print(Person.animal)  # 查
    # Person.money = '运用货币'  # 增
    # Person.mind = '无脑的' # 改
    # del Person.mind
    # print(Person.__dict__)
    
        #操作类中的方法  (工作中基本不用类名去操作)
    # Person.work(111)
    
    # 对象的角度
    # ret = Person('alex',1000, 'oldwomen')  # 类名+()的这个过程:实例化的过程(创建一个对象的过程),
              # Person() 实例化对象,实例,对象.
    # print(ret)
    
    
    #1, 类名+()产生一个实例(对象,对象空间.)
    #2, 自动执行类中的__init__方法,将对象空间传给__init__的self参数,
    #3, 给对象封装相应的属性.
    # print(ret.__dict__)
    
    # 对象的角度
        # 操作对象中的静态变量
            #1, __dict__ 查询对象中的所有的内容
            #2, 万能的.  万能的 点.
    # print(ret.name)  # 查
    # ret.high = 175  # 增
    # del ret.name  # 删
    # ret.age = 73 # 改
    # print(ret.__dict__)
        # 对象操作类中的静态变量 : 只能查询.
    # print(ret.mind)
    
        # 对象调用类中的方法  (工作中 通过对象执行类中的方法,而不是通过类名)
    # ret.shop()
    # print(ret)

    代码是我看视频的时候看到的,上面是我自己总结的,但是感觉面向对象学的有点懵逼,还没完全懂

  • 相关阅读:
    vi简单操作说明
    start django server
    计划
    在C#程序中使用ocx的方法
    在存储过程中使用另一个存储过程返回的查询结果集
    Java位操作大全(通用于C语言)
    对面象对象概念的理解、解释
    读书笔记 UltraGrid(14)
    Svcutil使用点滴
    水晶报表使用push模式(2)
  • 原文地址:https://www.cnblogs.com/hpcz190911/p/11613852.html
Copyright © 2020-2023  润新知