zoukankan      html  css  js  c++  java
  • 面向对象的介绍

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

    2.查询顺序

    3.组合

    1.

    类名称空间:定义了一个类之后,会在内存中开辟了一个类名称空间;所有定义类的内容都放在这个空间里.

    对象名称空间:实例化对象,就会在内存中新开辟一个对象名称空间,这个对象名称空间一开始就会装有"类对象指针";之后会再陆续添加一些对象的属性.

    2.查询顺序:

    class  A:

      name = "老男孩"

      job = "IT"

      def  __init__(self,name,age):

        self.name = name

        self.age = age

      def  act(self):

        print("我在睡觉")

    对象的查询顺序 : 先从对象空间中去找,对象的空间没有此变量或者方法,通过对象中的类对象指针去类中寻找.

    obj = A("alex",100)

    print(obj.name)

    print(obj.age)

    print(obj.act)

    类的查询顺序 : 直接从类本身去找.

    print(A.name)

    对象的问题:

    无论创建多少对象,都是开辟独立的空间.各个对象之间不能互相查找,干扰.

    obj = A("alex",100)

    obj1 = A("eva",100")

    他们是两个独立的空间,互不干扰.

    计算一个类实例化多少对象?

    class A:

      count = 0

      def __init__(self,name,age):

        self.name = name

        self.age = age

        A.count += 1

    obj = A("alex",123)

    obj = A("taibai",34)

    obj  = A("jinnvshen",23)

    print(A.count)

    组合:给一个类的对象,封装一个属性这个属性是另一个类的对象.

    我们来看下面的示例:

    class Game_role:

      def __init__(self,name,ad,hp):

        self.name = name

        self.ad = ad

        self.hp = hp

      def attack(self,obj1):

        obj1.hp = obj1.hp - self.ad

        print("%s攻击%s,%s掉了%s血,还剩%s血" %(self.name,obj1.name,obj1.name.self.ad,obj1.hp))

      def  package_weapon(self,wea):

        self.weapon = wea
    class  Sword:

      def __init__(self,name,ad):

        self.name = name

        self.ad = ad

      def  fight(self,p1,p2):

        p2.hp = p2.hp - self.ad

        print("%s用%s砍了%s一刀,%s还剩%s血"%(p1.name,self.name,p2.name,p2.name,p2.hp)

    aduan = Game_role("阿段",10,100)

    ts = Game_role("泰森",120,300)

    Slaughter_knife = Sword("杀猪刀",200)

    有这么一种方式:

    Slaughter_knife.fight(aduan,ts)

    这么写很别扭,难道是武器让人把自己拿起来砍别人吗?不符合逻辑啊!所以我们要换一种方式.

    aduan.package_weapon(Slaughter_knife)  #给aduan这个对象封装了一个weapon属性,这个属性值为Slaughter_knife

    aduan.weapon.fight(aduan,ts)

    ts.attack(aduan)

    print(aduan.weapon)

    print(aduan.weapon.name)

    aduan.weapon.fight(aduan,ts)

    上面这个示例展示了组合的用法,仔细捋清晰了!一步一步的来!

  • 相关阅读:
    python3线程介绍01(如何启动和调用线程)
    CentOS7 设置静态 ip
    png2ico
    Thunderbird 配置 QQ mail
    memcached 开机启动 (Ubuntu)
    CentOS7 docker 安装的 container-selinux 问题及解决
    YAML 的基本语法
    docker 的脚本化安装和使用
    解决Windows下 “setup.py build” 时出现错误 ” error: Unable to find vcvarsall.bat”
    Electric Fence
  • 原文地址:https://www.cnblogs.com/fengkun125/p/9238916.html
Copyright © 2011-2022 走看看