• python之面向对象初识


    一、面向对象初识
    1、结构上 面向对象分成两部分:属性、方法

    class A:
        name = 'xiaoming'   #  静态属性、静态变量、静态字段。
    
        def func1(self):    # 函数、动态属性、方法。
            pass

    2、函数与面向对象:
      1,函数封装一个功能,而面向对象封装多个相关的功能。
      2,面向对象比较抽象,它是一种思想,站在上帝的角度去理解它。
      3,面向对象程序可扩展,对象都是一个个独立的。耦合性,差异性。

    复制代码
    函数:
    def register(argv):
        pass
    
    def login(argv):
        pass
    
    def shoppingcar(self):
            pass
    
            
    面向对象:
    class Shopping:
        def __init__(self):  # 特殊方法
            pass
    
        def register(self):
            pass
    
        def login(self):
            pass
            
        def shoppingcar(self):
            pass
    复制代码

     

    3、类与对象:
    类:具有相同属性或者功能的一类实物。
    对象:对象是类的具体体现。

     


    二、类名、对象的使用
    1、类可以理解为:一个公共框架,一个公共模型

    复制代码
    class person:
        animal = '高级动物'
        walk_way = '直立行走'
        language = '语言'
    
        def eat(self):
            print('小心吃屎你')
    
        def play(self):
            print('天天就知道玩')
    复制代码

    2、类名的使用
    1,查看类中的所有属性及方法 __dict__
    print(person.__dict__)         # 查看类中的所有属性及方法

    print(person.__dict__['animal'])    # 通过__dict__方式可以查看单独的属性及方法,但是不能进行增删改

    person.__dict__['animal'] = '低级动物'   # 改:报错

    person.__dict__['name'] = 'xiaoming'    # 增:报错

    del person.__dict__['animal']     # 删:报错

    工作中,学习中一般用到 __dict__只是用来查看类中的所有属性及方法,不进行其他操作。

     

    2,查看(增删改)类中某个属性用万能的点 .

    复制代码
    print(person.animal)  #
    print(person.language)
    
    person.name = 'xiaoming'  #
    print(person.name)
    
    person.language = '中文' #
    print(person.language)
    
    del person.walk_way  #
    print(person.__dict__)
    复制代码


    3,操作方法,用类名可以执行方法,但是一般不通过类名操作!!!
    person.__dict__['eat'](111)      # 不建议通过__dict__执行方法
    person.play(666)


    3、对象的使用

    复制代码
    class person:
    
        animal = '高级动物'
        walk_way = '直立行走'
        language = '语言'
    
        def __init__(self,name,age,eye):  # 功能:给对象封装属性的。
            self.name1 = name
            self.age1 = age
            self.eye1 = eye
        
        def eat(self):
            print('小心吃屎你')
    
        def play(self):
            print('天天就知道玩')
    
            
    
    obj = person('xiaobai',1000,'小眼睛')  # 这个过程是一个实例化过程,他会实例化一个对象(会在内存实例化一个对象空间)。
    print(obj)  #obj是对象空间的地址
    print(obj.name1)  # 通过对象查看属性
    复制代码

    实例化过程内部进行了三个阶段:
      1,首先遇到 类名() 就会在内存中开辟一个对象空间,只有一个类对象指针(用一个变量接收这个对象空间地址)
      2,然后自动执行类中的__init__方法,并且将对象空间地址自动传给self参数,其他参数手动传入。
      3,最后执行__init__方法 给对象空间封装相应的属性。

     

    对象操作对象空间:

    1,对象查看对象空间所有的属性也可用 __dict__
    print(obj.__dict__)       # 返回一个包含对象空间所有属性的字典

    2,对象操作对象的某个属性(增删改查)用万能的点.
    obj.sex = '男'   # 增
    print(obj.sex)

    del obj.eye1    # 删
    print(obj.__dict__)

    obj.age1 = 18   # 改
    print(obj.age1)

    print(obj.name1)     #查
    print(obj.__dict__)  #查

     

    3,对象操作类空间的属性:只能查
    print(obj.animal) #查

    obj.animal = '低级动物'       # 想要这样改类的属性,是改不了的,它会为对象生成一个animal的属性并不会改变类的                                                 animal
    print(obj.animal)          # 低级动物
    print(person.animal)   # 高级动物

    del obj.language       # 删:报错


    4,对象操作类空间的方法:对象.方法()
    obj.eat()

     

    三、类名称空间,对象名称空间

    复制代码
    公用模板,公共框架
    class GameRole:
    
        rule = '游戏规则'
    
        def __init__(self,area,nickname,hp,ad):
            self.area = area
            self.nickname = nickname
            self.hp = hp
            self.ad = ad
    
        def attack(self):
            print('攻击谁')
    
    
    gailun = GameRole('德玛西亚','草丛伦',1000,75)  #实例化对象gailun
    yasuo = GameRole('艾欧尼亚','托儿所',500,89)   #实例化对象yasuo
    复制代码

    一张图片解释:


    1,对象能调用类中的属性与方法,但是不能修改类的属性和方法
    实例化一个对象的时候,会建立对象指向类的指针,gailun.属性名,先从自己空间去找,
    没有此属性它会通过类对象指针从类去找,类中找不到,会从父类去找。

    复制代码
    gailun.attack = 666  # 这里并不是调用类的attack方法,而是给对象增加一个属性 attack = 666
    print(gailun.attack)  # 666
    
    gailun.rule = gailun.rule  # 相当于gailun.rule = '游戏规则'  对象.属性名='游戏规则'
    print(gailun.rule)
    
    gailun.nikename = '盖伦'  #修改对象的属性
    print(gailun.nickname)
    复制代码

    2,类能不能调用对象的属性? 不能,因为类没有指向对象的指针
    print(GameRole.area)   # 报错


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


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

     

  • 相关阅读:
    Idea中SpringBoot热部署搭建
    Redis 集群搭建
    centos7 vsftp搭建
    Centos 7 安装jdk
    Centos7 安装nginx
    Xshell 连接Linux
    python 的mysql 操作
    NIO/BIO
    java基础-3
    java基础-2
  • 原文地址:https://www.cnblogs.com/yidashi110/p/10092265.html
Copyright © 2020-2023  润新知