zoukankan      html  css  js  c++  java
  • Day15 python基础---面向对象初识

    一,面向对象初识

    1.结构上理解:

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

    2.函数 vs 面向对象,对比

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

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

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

    3.类,对象

       类:具体相同属性或者功能的一类实物

       对象:对象是类的具体体现

    4.类名,对象的使用

    #类:一个公共框架,一个公共模型
    class Person:
    
        animal = '高级动物'
        walk_way = '直立行走'
        language = '语言'
    
        def eat(self):
            print('该吃吃,该喝喝,啥事别忘心里搁')
    
        def work(self):
            print('人类都需要工作。。。')
    #类名:
     #1.查看类中的所有属性及方法__dict__
        print(Person.__dict__)
        print(Person.__dict__['animal'])  #通过__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)
    #对象
    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(self)
            print('该吃吃,该喝喝,啥事别忘心里搁')
    
        def work(self):
            print('人类都需要工作。。。')
    #实例化:
    obj = Person('alex',1000,'小眼睛')  # 这个过程是一个实例化过程,他会实例化一个对象(他会在内存实例化一个对象空间)。
    print(obj)
    print(obj.name1)
    
    # 实例化过程内部进行了三个阶段:
    # 1,在内存中开辟了一个对象空间
    # 2,自动执行类中的__init__方法,并且将对象空间自动传给self参数,其他参数手动传入。
    # 3, 执行__init__方法 给对象空间封装相应的属性。
    # 对象:
        # 对象操作对象空间
            # 对象查看对象空间所有的属性  __dict__
            print(obj.__dict__)
    # 对象操作对象的某个属性 增删改查 万能的点. obj.sex = '' # del obj.eye1 # obj.eye1 = '大一点' # print(obj.name1) print(obj.__dict__)
    # 对象操作类空间的属性 只能查 print(obj.animal) obj.animal = '低级动物' #对象添加属性 print(obj.animal) print(obj.__dict__) print(Person.__dict__)
    # 对象操作类空间的方法 obj.eat()

    5.类名称空间,对象名称空间

    # 公用模板,公共框架
    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)
    yasuo = GameRole('艾欧尼亚','托儿所',500,150)
    penzi = GameRole('中国','键盘侠',10,100)
    # 1对象为什么能调用类中的属性与方法?只是调用,不能改变
    # 对象名.属性名  先从自己空间去找,没有此属性他会通过类对象指针从类去找,  类中找不到,会从父类去找。
    print(gailun.hp)   #打印对象的hp属性
    gailun.attack = 666  # 给对象增加一个属性 attack = 666
    print(gailun.attack)
    gailun.rule = gailun.rule    #增加属性
    print(gailun.rule)
    gailun.nikename = '盖伦'  #修改属性
    print(gailun.nickname)
    # 对象只能查看类中的属性,不能增删改类中的属性。

    # 2,类能不能调用对象的属性? 不能
    # print(GameRole.area) #报错
    # 3,对象与对象之间可不可互相调用?
    # 同一个类实例化出来的对象之间是不能互相访问的。
    # 不同类实例化的对象有可能互相访问。
    
    
    # 给对象封装属性:__init__ 特殊方法
    #在任意位置都可以给对象封装属性
  • 相关阅读:
    [NOTE]常用Linux命令总结[Thx for commandlinefu]
    [原]隧道Proxy原理详解(基于Node.js)
    [转]MySQL索引详解(1)
    [QA]服务端进程模型
    [转]MySQL索引详解(2)
    非动态规划实现LCS算法
    Java里线程安全的有界容器的实现
    maven历史版本下载
    JDK9下载
    maven排除依赖和添加本地依赖
  • 原文地址:https://www.cnblogs.com/lianyeah/p/9526459.html
Copyright © 2011-2022 走看看