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)

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

  • 相关阅读:
    蓝桥网试题 java 基础练习 特殊的数字
    蓝桥网试题 java 基础练习 杨辉三角形
    蓝桥网试题 java 基础练习 查找整数
    蓝桥网试题 java 基础练习 数列特征
    蓝桥网试题 java 基础练习 字母图形
    蓝桥网试题 java 基础练习 01字串
    蓝桥网试题 java 基础练习 回文数
    蓝桥网试题 java 基础练习 特殊回文数
    Using text search in Web page with Sikuli
    each of which 用法
  • 原文地址:https://www.cnblogs.com/fengkun125/p/9238916.html
Copyright © 2011-2022 走看看