zoukankan      html  css  js  c++  java
  • Python学习笔记-Day15

    今日大纲

    一、面向对象初识

    二、类名、对象的使用

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

    一、面向对象初识

    1、类和对象的定义

    类:具有相同属性或功能的一类事物

    对象:类的具体体现

    从结构上讲:面向对象可以分为两部分:属性和方法。

    属性又叫静态属性、静态字段、静态变量

    方法又叫动态属性、函数

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

    2、函数VS面象对象

    ① 函数封装一个功能,而面向对象封装多个相关的功能

    ② 面向对象抽象,他是一种独立的思想,要站在上帝的角度去理解

    ③ 程序可扩展,对象是一个个独立的。耦合性,差异性

    二、类名、对象的使用

    类是公共模板,公共框架

    1、类名的使用

    ① 查看类中所有的属性和方法:__dict__。虽然__dict__也能查看类中某一个属性,但是只用来查看类中的所有属性和方法,不做其他用途

    ② 增删改查类中的属性:用万能的点(类中没有该属性就增,有该属性就改)

    ③ 操作类中的方法一般不通过类名(一般通过对象名)

    class Person:
        animal = '高等动物'
        walk_way = '直立行走'
        langua = '语言'
    
        def __init__(self):
            pass
        def eat(self):
            print('吃吃吃,喝喝喝')
        def work(self):
            print('每个人都需要工作')
    print(Person.__dict__)  #{'__module__': '__main__', 'animal': '高等动物', 'walk_way': '直立行走', 'langua': '语言', '__init__': <function Person.__init__ at 0x0000022784C75488>, ....
    print(Person.__dict__['animal'])  #高等动物  通过__dict__方式可以查单独的属性和方法,但是不能增删改
    print(Person.animal)  #查  高等动物
    Person.name = 'hello' #类中没有这个属性 增
    Person.animal = '低等动物'  #类中有这个属性  改
    del Person.walk_way  #

    2、对象的使用

    ① 实例化一个对象:对象名 = 类名(init 参数),会经历三个阶段

    Ⅰ 创建一个对象名称空间,产生一个指向类名称空间的指示盘:类对象指针

    Ⅱ 将该对象名称空间的地址传给__init__函数的self参数

    Ⅲ 执行 __init__方法,给对象封装属性

    ② 对象操作对象空间

    Ⅰ 对象查看对象空间的所有属性__dict__

    Ⅱ 对象操作对象的某个属性,增删改查,用万用的点(对象中没有该属性就增,有该属性就减)

    ③ 对象操作类空间的属性,只能查

    ④ 对象操作类空间的方法:万能的点

    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 work(self):
            print('每个人都应该要有工作')
    obj = Person('小明',12,'蓝眼睛')  #实例化一个对象
    print(obj)  #<__main__.Person object at 0x00000207183C7748>
    print(obj.__dict__)  #{'name1': '小明', 'age1': 12, 'eye1': '蓝眼睛'}
    
    #增删改查
    print(obj.name1)  # 查 小明
    obj.sex  = ''
    print(obj.__dict__)  # 增 {'name1': '小明', 'age1': 12, 'eye1': '蓝眼睛', 'sex': '男'}
    obj.eye1 = '黄眼睛'
    print(obj.__dict__)  # 改 {'name1': '小明', 'age1': 12, 'eye1': '黄眼睛', 'sex': '男'}
    del obj.eye1
    print(obj.__dict__)   # 删 {'name1': '小明', 'age1': 12, 'sex': '男'}
    print(obj.animal)  #高级动物
    obj.animal ='低级动物'  #只是在obj的空间里增加属性 animal = '低级动物'
    
    #调用类中的方法
    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('德玛西亚','草丛伦',10000,75)
    yasuo = GameRole('艾欧尼亚','托儿所',500,150)

    执行过程:

    ① 遇到类名创建一个类名称空间,空间中包含类中的所有属性和方法

    ② 实例化一个对象,创建一个对象空间,产生一个指向类名称空间的指示盘:类对象指针,并将对象的空间地址传给__init__的参数self

    ③ 执行init方法,给对封装init里有的属性

    1、对象只能调用类空间的属性和方法,不能进行增删改。因为对象空间中有指向类的类对象指针。调用方法:对象名.属性

    在查看一个属性时,会先从对象空间中找,没有此属性会通过类对象指针从类中寻找,类中找不到会从父类中找。

    2、类不能调用对象的属性

    3、对象与对象之间能不能互相调用?

    同一个类实例化的对象之间不能互相访问

    不同实例化对象之间有可能互相访问

    4、可以在任何位置给对象封装属性

    ① 直接用万能的点

    ② 在类中定义一个函数,对象调用这个函数。

    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('施展了一个攻击')
    
        def pen(self):
            self.pen=10000
    
    gailun = GameRole('德玛西亚','草丛伦',10000,75)
    yasuo = GameRole('艾欧尼亚','托儿所',500,150)
    penzi = GameRole('中国','键盘侠',10,100)
    penzi.pen()
    print(penzi.__dict__)   #{'area': '中国', 'nickname': '键盘侠', 'hp': 10, 'ad': 100, 'pen': 10000}
  • 相关阅读:
    SpringMVC中利用@InitBinder来对页面数据进行解析绑定
    转型新零售必看:线下零售的运营模型
    主流CTR预估模型的演化及对比
    tensorflow创建自定义 Estimator
    构建分布式Tensorflow模型系列:CVR预估之ESMM
    tensorflow tfdbg 调试手段
    推荐系统算法学习(一)——协同过滤(CF) MF FM FFM
    CTR预估算法之FM, FFM, DeepFM及实践
    深度学习在美团搜索广告排序的应用实践
    Redis集群搭建最佳实践
  • 原文地址:https://www.cnblogs.com/tian-tian/p/9526683.html
Copyright © 2011-2022 走看看