• python----面向对象初识


    1、面向对象编程

      面向对象的程序设计的核心是对象(上帝式思维),要理解对象为何物,必须把自己当成上帝,上帝眼里世间存在的万物皆为对象,不存在的也可以创造出来。 

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

    在python 中面向对象的程序设计并不是全部。

    面向对象编程可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率 ,另外,基于面向对象的程序可以使它人更加容易理解你的代码逻辑,从而使团队开发变得更从容。

    了解一些名词:类、对象、实例、实例化

    类:具有相同特征的一类事物(人、狗、老虎)

    对象/实例:具体的某一个事物(隔壁阿花、楼下旺财)

    实例化:类——>对象的过程(这在生活中表现的不明显,我们在后面再慢慢解释)

    结构:

    class A:    #A 是一个类
        name = 'alex'    #静态属性,静态变量
        def dunc1(self):    #函数,动态属性,方法
            pass


    class Shopping_Car:
      def __init__(self):  #特殊方法
        pass
      def register(self):
        pass
      def login(self):
        pass
      def Shoppingcar(self):
        pass

      类是具有相同属性或者功能的一类事物,一个类可以封装多个函数,也就是多个方法,类方便扩展。

      现在我们建立一个人类,人共有的属性,比如是‘高级动物’,然后行为,也就是方法有吃,工作:

    class Person:
        animal = '高级动物'
        def eat(self):
            print('要吃饭啦')
        def work(self):
            print('该工作啦')

    # 1,查看类中的所有属性及方法 __dict__
    # print(Person.__dict__)
    # print(Person.__dict__['animal']) # 通过__dict__方式 单独的属性及方法可以查,但是不能增删改
    # Person.__dict__['animal'] = '低级动物'
    # Person.__dict__['name'] = 'alex'
    # print(Person.__dict__)
    # 工作中,学习中 一般用到 __dict__查看类中的所有属性及方法,不进行其他操作。
    #2,查看,(增删改)类中某个,某些属性 用 万能的点 .
    # print(Person.animal) # 查
    # print(Person.language)
    # Person.name = 'alex' # 增
    # print(Person.name)
    # Person.animal = '低级动物' # 改
    # del Person.walk_way # 删
    # print(Person.__dict__)
    #3,操作方法 一般不通过类名操作!!!
    # Person.__dict__['work'](111) 不建议通过__dict__执行方法
    # Person.work(666)

    2、什么是实例化

      在类中有个特殊的方法__init__(self)函数,这个函数有什么用,看下面代码:

    class Person:
            animal = '高级动物'
            def __init__(self):
                print('111')
            def eat(self):
                print('222')
    
    Person()  #111
    

    大家发现但你执行类时__init__(self)就直接执行了,这是因为Person()是一个实例化的过程,他会自动先执行init函数里的代码来给实例化对象,通常我们写成下面模式:

    class Person:
        animal = '高级动物'
        def __init__(self):
            print('111')
        def eat(self):
            print('222')
    obj = Person()

      然后你会发现obj.可以使用Person类的所有方法和查看属性,那么为什么要先执行init函数呢,实际上init函数是给对象增加特有属性,上述的例子我们用__dict__方法可以看到obj里面什么都没有

    class Person:
        animal = '高级动物'
        def __init__(self):
            print('111')
        def eat(self):
            print('222')
    obj = Person()    #111
    print(obj.__dict__)  #{}

    可以看出{}是个空字典。实际上创建对象实例化的过程是:1.首先内存会生成一个对象空间,然后这个空间会指向类的init函数,可以理解就是函数self参数,也就是会默认将obj的对象空间地址指向self传给init,这样对象就可以执行init函数,那为什么是空,因为你子init函数中除了默认self地址参数外就没有传属性,下面将另一个例子。

      实例化是一个类通过赋给特定的属性,并执行方法行为生成的对象,语法是obj =类()

    class GameRole:
    
        rule = '游戏规则'
        hp = 1800
        def __init__(self,area,nickname,hp,ad):
            self.area = area
            self.nickname = nickname
            self.hp = hp
            self.ad = ad
    
        def attack(self):
            print('谁施展了一个攻击')
    
        def pen(self):
            self.pen=10000

    上面定义了一个GamRole类,该类的属性有rule 和hp,然后有__init__函数还有attack与pen函数。

    那么我们先生成一个角色叫做盖伦,生成对象:

    class GameRole:
    
        rule = '游戏规则'
        hp = 1800
        def __init__(self,area,nickname,hp,ad):
            self.area = area
            self.nickname = nickname
            self.hp = hp
            self.ad = ad
    
        def attack(self):
            print('谁施展了一个攻击')
    
        def pen(self):
            self.pen=10000
    gailun = GameRole('德玛西呀','草丛伦',1000,75)
    这样我传给了init除seft额外的三个参数,这样我去调用__dict__方法时可以看出实例化生成的guilun对象就有了自己的属性:
    class GameRole:
    
        rule = '游戏规则'
        hp = 1800
        def __init__(self,area,nickname,hp,ad):
            self.area = area
            self.nickname = nickname
            self.hp = hp
            self.ad = ad
    
        def attack(self):
            print('谁施展了一个攻击')
    
        def pen(self):
            self.pen=10000
    gailun = GameRole('德玛西呀','草丛伦',1000,75)
    print(gailun.__dict__)    #{'area': '德玛西呀', 'nickname': '草丛伦', 'hp': 1000, 'ad': 75}
    这样我们就实例化了一个叫guilun的对象。
    图解实例化过程:








    总结:

    # 1对象为什么能调用类中的属性与方法而且只是调用,不能改变?
    # gailun.属性名 先从自己空间去找,没有此属性他会通过类对象指针从类去找, 类中找不到,会从父类去找。
    # print(gailun.hp)
    # gailun.attack = 666 # 给对象增加一个属性 attack = 666
    # print(gailun.attack)
    gailun.rule = gailun.rule # '游戏规则'
    # gailun.rule = 游戏规则'
    # 对象.属性名='游戏规则'
    print(gailun.rule)
    gailun.nikename = '盖伦'
    print(gailun.nickname)
    # 对象只能查看类中的属性,不能增删改类中的属性。

    # 2,类能不能调用对象的属性? 不能


    # print(GameRole.area)
    # 3,对象与对象之间可不可互相调用?
    # 同一个类实例化出来的对象之间是不能互相访问的。
    # 不同类实例化的对象有可能互相访问。

    # 给对象封装属性:__init__ 任意位置。



  • 相关阅读:
    问题大全
    redis学习笔记-03:redis安装
    redis学习笔记-02:为什么使用NoSQL数据库
    redis学习笔记-01:redis简介
    docker学习笔记-05:Docker安装mysql和redis
    docker学习笔记-06:自定义DockerFile生成镜像
    docker学习笔记-05:DockerFile解析
    全栈之路-杂篇-JPA多对多配置分析
    全栈之路-小程序API-JWT令牌详细剖析与使用
    全栈之路-小程序API-Json数据类型的序列化与反序列化
  • 原文地址:https://www.cnblogs.com/Kingfan1993/p/9526010.html
Copyright © 2020-2023  润新知