• python课堂整理33----面向对象(我的对象又在哪里)


    一、面向对象设计(Object Oriented Design)

    将一类具体事物的数据和动作整合到一起,即面向对象设计

    理解两个概念:

    类:把一类事物的相同的特征和动作整合到一起就是类,类就是一个抽象的概念

    对象:就是基于类而创建的一个具体的事物(具体存在的),也就是特征和动作整合到一起

    例:

    def people(gender,country):  #定义一个“人”的类
        def init(gender, country): #相当于初始化
            dir = {               #人的特征和动作
                "gender":gender,
                "country": country,
                "eat": eat,
                "sleep":sleep
            }
            return dir
        def eat(dir):
            print("%s %s正在吃饭"%(dir["country"], dir["gender"]))
    
        def sleep(dir):
            print("%s %s正在睡觉"%(dir["country"], dir["gender"]))
        return init(gender, country)
    
    p1 = people("man", "China") #得到的是一个字典
    p1["eat"](p1)               #通过字典取值调用函数,函数需要的参数在字典里
    p2 = people("女人", "日本")
    p2["sleep"](p2)
    

      

     二、面向对象编程(Object oriented Programming)

    用定义类 + 实例/对象的方法去实现面向对象的设计

    实例化:由类生产对象的过程叫实例化,类实例化的结果就是一个对象,或者叫做一个实例(实例 = 对象)

    .....
    class  类名 :
        '类的文档字符串'
        类体
        
    .....
        
    
    class Chinese:
        '这是一个中国人的类'
        pass
    
    #实例化
    p1 = Chinese() #就相当于函数的return返回的结果
    print(p1)
    
    #经典类
    class  类名 :
        '类的文档字符串'
        pass
    
    #新式类
    class 类名(object) :
        pass
    

    在python2中,经典类和新式类不同,在python3中都归为新类

    三、属性相关知识

    1. 数据属性:就是变量

    2. 函数属性:就是函数,在面向对象里通常称为方法

    注意:类和对象均用点来访问自己的属性

    class Chinese:
        '这是一个中国人的类'
        dang = 'gong chan党'
    
    print(Chinese.dang)
    

    class Chinese:
        '这是一个中国人的类'
        dang = 'gong chan党'
        def helpp():
            print("一个人正在帮助老奶奶")
        def jump_queue(self):
            print("插到了前面")
    
    print(Chinese.dang)
    Chinese.helpp()
    Chinese.jump_queue("暂时随便传个参数")
    

    class Chinese:
        '这是一个中国人的类'
        dang = 'gong chan党'
        def helpp():
            print("一个人正在帮助老奶奶")
        def jump_queue(self):
            print("插到了前面")
    
    print(dir(Chinese)) #以列表形式存放属性名
    print(Chinese.__dict__) #查看字典属性
    #类的点方法就是到属性字典里面取值
    print(Chinese.__dict__["dang"])
    Chinese.__dict__["helpp"]()
    Chinese.__dict__["jump_queue"]("暂时随便传个参数")
    

     四、特殊的类属性

    class Chinese:
        '这是一个中国人的类'
        dang = 'gong chan 党'
        def helpp():
            print("一个人正在帮助老奶奶")
        def jump_queue(self):
            print("插到了前面")
    
    print(Chinese.__name__) #类名字符串
    print(Chinese.__doc__)# 类文档字符串
    print(Chinese.__base__) #类的老祖先(讲继承时讲)
    print(Chinese.__bases__)#类的祖先元组形式
    print(Chinese.__module__) #类所在的模块
    print(Chinese.__class__) #实例该类对应的类
    

      

    五、对象相关知识

    class Chinese:
        '这是一个中国人的类'
        dang = 'gong chan 党'
        def __init__(self, name, age, gender):  #初始化,实例化类的时候自动调用
            self.mingzi = name
            self.nianling = age
            self.xingbiie = gender
    
        def helpp():
            print("一个人正在帮助老奶奶")
        def jump_queue(self):
            print("插到了前面")
    
    #实例化,就是调用__init__的过程,实例化的结果不包括函数属性,只有数据属性。
    p1 = Chinese('金灵', 19, 'girl')
    print(p1.__dict__) #得到init中初始化的字典数据
    print(p1.__dict__["nianling"])
    print(p1.nianling)  #下面这个是通过点方法直接查看年龄,其内部就是上面那个过程
    

    class Chinese:
        '这是一个中国人的类'
        dang = 'gong chan 党'
        def __init__(self, name, age, gender):  #初始化,实例化类的时候自动调用
            self.mingzi = name
            self.nianling = age
            self.xingbiie = gender
    
        def helpp():
            print("一个人正在帮助老奶奶")
        def jump_queue(self):
            print("{}插到了前面".format(self.mingzi))
    
    #实例化,就是调用__init__的过程,实例化的结果不包括函数属性,只有数据属性。
    p1 = Chinese('乔碧萝', 58, 'wuman')
    Chinese.jump_queue(p1)  #太low,用下面的对象方法调用
    p1.jump_queue()
    p1.helpp()  #会报错,因为在python底层,会把这行代码写成 p1.helpp(p1),而函数本身不需要参数
    

      

     

    self的意义:

    self 就是实例本身,这里指 p1

    class Chinese:
        '这是一个中国人的类'
        dang = 'gong chan 党'
        def __init__(self, name, age, gender):  #初始化,实例化类的时候自动调用
            self.mingzi = name
            self.nianling = age
            self.xingbiie = gender
    
        def helpp():
            print("一个人正在帮助老奶奶")
        def jump_queue(self):
            print("{}插到了前面".format(self.mingzi))
    
    #实例化,就是调用__init__的过程,实例化的结果不包括函数属性,只有数据属性。
    p1 = Chinese('乔碧萝', 58, 'wuman')
    #调用jump_queue函数时,先在p1所在的init下(即p1.__dict__)下去找,找不到去外面一层找,即类字典下(Chinese.__dict__)
    #即函数属性跟类要
    p1.jump_queue()
    

      

     

    一个奋斗中的产品小白
  • 相关阅读:
    结构化建模分析
    qemusystemriscv64 machine \?
    git clone commit
    riscv gdb machine mode
    error: src refspec main does not match any.
    riscv ecall
    git windows
    fixedlink
    iperf交叉编译
    每日学习
  • 原文地址:https://www.cnblogs.com/dabai123/p/11408998.html
Copyright © 2020-2023  润新知