zoukankan      html  css  js  c++  java
  • day15

    面向对象从结构上理解分为两部分:

      1.静态属性,静态变量,静态字段

      2.动态属性,方法,函数

    class A:
        name = 'ake'   #静态属性
        def func1(self):
            pass       #动态属性,方法,函数  

    比如一个购物车,里面有一些功能可以好几个环节能用的,那就可以拿出来当成一个对象

    class Shopping_Car:
        def __init__(self):
            pass            #特殊方法,这里面是具体对象的独特的功能,这里面可以有多个功能
        def register(self):
            pass           #每一个函数封装成一个独特的功能
        def login(self):
            pass
    

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

    2.面向对象抽象,他是一种思想,站在上帝的角度去理解他,把想要创造的一类东西的通性放在类里,而这个类里面的独有的分支,以及个体独有的一些功能封装到对象里的一个个功能里

    3.程序可扩展,对象都是一个个独立的,有偶合性,差异性

    类与对象的区别:

    类:是一类事物具有相同的属性

    对象:对类的具体体现

    我们可以比喻成一个公共的框架,一个公共的模型

    class Person:
        animal = '高级动物'
        walk = '直立行走'
        language = '语言'
    
        def __init__(self, name, age, eye):
            self.name = name
            self.age = age
            self.eye = eye
    
        def eat(self):
            print('吃饭')
    
        def work(self):
            print('工作')
    obj = Person('ake',13,2)
    print(obj)             #<__main__.Person object at 0x000001536F4F0940>
    print(obj.name)        #ake

    这个过程是一个实例化过程(它会在内存中实例化一个对象空间)

    实例化过程内部进行了三个阶段:

    1.在内存中开辟了一个对象空间

    2.自动执行__init__方法,并将对象空间自动传给self参数,其他参数手动传入

    3.执行__innit__方法中,给对象空间封装相应的属性

    对象:

      对象操作对象空间的所有属性  __dict__

    print(obj.__dict__)

      对操作对象的某个属性,增删改查,使用万能的点  ‘ .’ 

    class Person:
        animal = '高级动物'
        walk = '直立行走'
        language = '语言'
    
        def __init__(self, name, age, eye):
            self.name = name
            self.age = age
            self.eye = eye
    
        def eat(self):
            print('吃饭')
    
        def work(self):
            print('工作')
    obj = Person('ake',13,2)
    print(obj)             #<__main__.Person object at 0x000001536F4F0940>
    print(obj.__dict__)    #{'name': 'ake', 'age': 13, 'eye': 2}
    obj.sex = '男'
    print(obj.__dict__)    #{'name': 'ake', 'age': 13, 'eye': 2, 'sex': '男'}   增加
    obj.eye = '眼睛很大'
    print(obj.__dict__)    #{'name': 'ake', 'age': 13, 'eye': '眼睛很大', 'sex': '男'}  改动
    print(obj.name)        #ake   对对象空间的查
    

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

    class Person:
        animal = '高级动物'
        walk = '直立行走'
        language = '语言'
    
        def __init__(self, name, age, eye):
            self.name = name
            self.age = age
            self.eye = eye
    
        def eat(self):
            print('吃饭')
    
        def work(self):
            print('工作')
    obj = Person('ake',13,2)
    print(obj.animal)      #高级动物   查
    obj.animal = '低级动物'
    print(obj.animal)      #低级动物  虽然打印出低级动物,但是是增加到了对象空间
    print(obj.__dict__)    #{'name': 'ake', 'age': 13, 'eye': '眼睛很大', 'sex': '男', 'animal': '低级动物'}
    print(Person.__dict__)  #而类空间里的高级动物也依然在,并没有被修改

    对象操作类空间的方法

    obj.eat()
    

    1,对象为什么能调用类中的属性与方法而且只能调用不能改变? 

    class GameRole:
        rule = '游戏规则'
        def __init__(self,area,nickname,hp,ad):
            self.area = area
            self.nickanme = nickname
            self.hp = hp
            self.ad = ad
        def attack(self):
            print('谁施展了一个攻击')
        def pen(self):
            self.penzi = 1000
    p1 = GameRole('德玛西亚','草丛伦',1000,75)
    

      p1.属性名:先从自己属性空间里面找,没有此属性再通过类对象指针从类空间去找,类找不到,会从父类中找

    print(p1.hp)                   #1000
    p1.attack = 666
    p1.attack() #TypeError: 'int' object is not callable ,显示数字类型不可以被调用,能被调用的只能是函数
    print(p1.attack) #666
    先执行等号右边,将游戏规则赋值给等号左边,等号左边在p1的对象空间里面又添加了一个rule,此时打印p1.rule,打印的是对象空间里新增加的那个属性
    p1.rule = p1.rule
    print(p1.rule)           #游戏规则 
    

     对象可以修改对象空间的值

    p1.nickanme = '盖伦'
    print(p1.nickanme)
    

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

    print(GameRole.area) 
    

    3.对象与对象之间可不可以互相调用?

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

    不同类型实例化的对象有可能互相访问

    class Gamerole:
        rule = '游戏规则'
        def __init__(self, nickname, ad, hd):
            self.nickname = nickname
            self.ad = ad
            self .hd = hd
    
        def atterk(self,w):
            self.waepon = w
    p1 = Gamerole('艾伦', 20, 100)
    p2 = Gamerole('剑豪', 50, 200)
    class Weapon:
        def __init__(self, w, ad):
            self.w = w
            self.ad = ad
        def fight(self,sole1, sole2):
            sole2.hd = sole2.hd - self.ad
            print('{}攻击了{},{}受伤了,掉了{}血,还剩{}血'
                  .format(sole1.nickname, sole2.nickname, sole2.nickname, self.ad, sole2.hd))
    w1 = Weapon('刀', 20)
    w2 = Weapon('剑', 50)
    p2.atterk(w2)
    p2.waepon.fight(p2, p1)
    

     Weapon类将w1传入Gamerole类里面的atterk方法里,这样p2就可以调用此类里面的方法此种方法的原理就是:给一个类的对象封装一个属性,而这个属性是另一个类的对象

  • 相关阅读:
    JS加密库
    异常处理
    uva 10673 Play with Floor and Ceil
    执⾏ Python 程序的三种⽅式----pycharm安装
    第⼀个 Python 程序
    认识 Python
    svg的使用
    elementUI中el-image显示不出来图片?img与el-image的区别
    类型转化与变量
    liunx
  • 原文地址:https://www.cnblogs.com/beriuta/p/9527251.html
Copyright © 2011-2022 走看看