Python之面向对象(二)类的空间问题及类之间的关系

6.3 类的空间问题及类之间的关系

  1. 类空间的问题

    • 何处可以添加对象属性
    • class A:
          def __init__(self,name):
              self.name = name
          def func(self,sex):
              self.sex = sex
      
      obj = A("alex")
      obj.age = 18 # 通过__init__方法添加
      print(obj.__dict__)
      obj1 = A("wusir")
      obj.func("男") # 通过func方法添加
      print(obj1.__dict__)
      # 结果:
      {'name': 'alex', 'age': 18}
      {'name': 'wusir'}
    • 总结:对象的属性不仅可以在__init__里面添加,还可以在类的其他方法或者类的外面添加
  2. 何处可以添加类的静态属性
    • class A:
          def __init__(self,name):
              self.name = name
          def func(self,sex):
              self.sex = sex
          def func1(self):
              A.bbb = 'ccc'
      
      A.aaa = "alex" # 类的外部添加
      print(A.__dict__)
      A.func1(111) # 类的内部添加
      print(A.__dict__)
    • 总结:类的属性不仅可以在类内部添加,还可以在类的外部添加
  3. 对象如何找到类的属性
    • 对象之所以可以找到类,是因为对象空间有类对象指针
    • 对象查找属性的顺序:先从对象空间找 ------> 类空间找 ------> 父类空间找 ------->.....
    • 类名查找属性的顺序:先从本类空间找 -------> 父类空间找--------> ........
    • 上面的顺序都是单向不可逆,类名不可能找到对象的属性。
  4. 类之间的关系
    • 类之间存在以下几种关系:依赖关系、关联关系、组合关系、聚合关系、实现关系、继承关系
  5. 依赖关系
    • 依赖关系:将一个类的对象或者类名传到另一个类的方法使用。此时, 我们说, ?象和冰箱之间就是依赖关系. 我?着你. 但是你不属于我.
    • class Elephant:
          def __init__(self,name):
              self.name = name
          def open(self,obj):
              print(f"{self.name}默念3,2,1,{obj.name}打开了")
          def close(self):
              print(f"{self.name}关上了{self.name}的门")
      
      class Bx:
          def __init__(self,name):
              self.name = name
          def open(self,obj1):
              print(f"{self.name}的门被{obj1.name}打开了")
          def close(self,obj1):
              print(f"{self.name}的门被{obj1.name}关上了")
      
      obj1 = Elephant("qq")
      obj = Bx("B")
      obj1.open(obj)
  6. 组合关系(2,3,4)
    • class Boy:
          def __init__(self,name,girlfriend=None):
              self.name = name
              self.girlfriend = girlfriend
          def have_a_dinner(self):
              if self.girlfriend:
                  print(f"{self.name}请他的女朋友{self.girlfriend}一起烛光晚餐")
              else:
                  print('单身狗,吃什么吃')
      liye = Boy("李业")
      liye.have_a_dinner()
      
      liye = Boy("李业")
      liye.girlfriend = "乔碧萝"  # 在对象外部给对象赋值
      liye.have_a_dinner()
      class Boy:
          def __init__(self,name,girlfriend = None):
              self.name = name
              self.girlfriend = girlfriend
      
          def have_a_dinner(self):
              if self.girlfriend:
                  print(f"{self.name}请他的{self.girlfriend.age}岁的,{self.girlfriend.body}的女朋友{self.girlfriend.name}一起烛光晚餐")
              else:
                  print("单身狗吃什么吃")
      
      class Girl:
          def __init__(self,name,age,body):
              self.name = name
              self.age = age
              self.body = body
      
          def skill(self):
              print(f'{self.name}会用萝莉音直播')
      
      liye = Boy("李业")
      qiao = Girl("乔碧萝",58,"小光跑")
      liye.girlfriend = qiao   # 对象静态属性为qiao对象
      liye.have_a_dinner()
      class GameRole:
          def __init__(self,name,ad,hp):
              self.name = name
              self.ad = ad
              self.hp = hp
      
          def attack(self,p1):
              p1.hp = p1.hp - self.ad
              print(f"{self.name}攻击{p1.name},{p1.name}掉了{self.ad},还剩{p1.hp}血")
              print(f"{p1.name}的血量为{p1.hp}")
      
          def equipment_wea(self,wea):
              self.weapon = wea
      
      class Weapon:
          def __init__(self,name,ad):
              self.name =name
              self.ad = ad
          def weapon_attack(self,p1,p2):
              print(f"self:{self}")
              p2.hp =p2.hp -self.ad
              print(f"{p1.name}利用{self.name}给了{p2.name}一下子,{p2.name}还剩{p2.hp}血")
      
      gl = GameRole('盖伦',10,100)
      zx = GameRole('菊花信',15,80)
      sword = Weapon('宝剑',15)
      Musket = Weapon('长缨枪',30)
      gl.equipment_wea(sword) # 给人物装备武器对象。
      gl.weapon.weapon_attack(gl,zx) # 组合:给一个对象封装一个属性,该属性是另一个类的对象
    • 组合:将一个类的对象封装到另一个类的对象的属性中,就叫组合

原文地址:https://www.cnblogs.com/zhangdadayou/p/11415339.html

时间: 2024-10-07 14:13:47

Python之面向对象(二)类的空间问题及类之间的关系的相关文章

Oracle 表空间和数据文件之间的关系

首先,你需要明白的一点是:数据库的物理结构是由数据库的操作系统文件所决定,每一个Oracle数据库是由三种类型的文件组成:数据文件.日志文件和控制文件.数据库的文件为数据库信息提供真正的物理存储. 每一个Oracle数据库有一个或多个物理的数据文件(data file).一个数据库的数据文件包含全部数据库数据.逻辑数据库结构(如表.索引等)的数据物理地存储在数据库的数据文件中.数据文件通常为*.dbf格式,例如:userCIMS.dbf.数据文件有下列特征:①.一个数据文件仅与一个数据库联系:②

EF数据存贮问题二之“无法定义这两个对象之间的关系,因为它们附加到不同的 ObjectContext 对象”

“无法定义这两个对象之间的关系,因为它们附加到不同的 ObjectContext 对象”,这是在EF中,一对多关系表,有外键的类保存至数据库中出现的错误. 我原来是用JAVA开发的,习惯性的处理一对多中类与类的关系,在C#里也是这样处理的.下面是个简单的一对多关系C#里的实现(先数据库,后VS生成代码): public class ObjectA{ public int ID{set;get;} public int objectbid{set;get;}//数据库生成 public Objec

django之模型类、迁移和数据库表之间的关系

环境配置:ubuntu 16.04,Django 1.8.2,MySQL-python 1.2.5 目的是为了了解模型类的定义和其对应数据库里面表的关系 实测发现: 关于模型类和数据库里面的表关系,模型类里面定义的类属性是为了生成数据库里面的表结构使用的,类似mysql里面创建一个表. 一个模型类,对应着数据库里面的一个表. 一个类属性,对应着数据库表里面的一个字段 一个类属性的类型(如charfield),对应着数据库里面字段类型. 进入python manage.py shell运行的pyt

python\类名称空间和对象名称空间

1 类名称空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类的良好总属性:数据属性和函数属性 其中类的数据属性是共享给所有对象 print(id(g1.camp))     #引用的地址是一样的 print(id(Garen.camp)) 输出结果为: 364617767096 364617767096 其中类的函数属性是绑定到所有对象 print(id(g1.attack))      #两个引用地址不一样 print(id(Garen.attac

面向对象,类名称空间,查找顺序,组合

# 程序从上往下一次把类的静态变量和方法全部加载进一个内存空间,直到遇到类名加括,实例化对象的时候会新开辟一个内存空间,# (会有一个类对象指针)在对象里面没找到目标会根据指针,去类里面找 # 查询顺序:# 对象.属性:先从对象空间找,如果找不到,再从类空间找,再找不到再从父类找# 类名.属性:先从本类空间找,如果找不到,再从父类找 类名称空间:在定义类的时候会开辟一个空间,这个空间里面装着所有的类class Person: animal='高级动物' soul='有灵魂' language='

Python面向对象02/类的空间问题

Python面向对象02/类的空间问题 内容大纲 1.从空间角度研究类 2..类与类之间的关系 1.类的空间问题 1.1何处可以添加对象属性 在类的__init__可以添加,在类的方法也可以添加,在类的外部也可以添加 # class Human: # # mind = '有思想的' # # def __init__(self, name, age): # self.name = name # self.age = age # # def eat(self,argv): # # self.hobb

python 之 面向对象基础(定义类、创建对象,名称空间)

第七章面向对象 1.面向过程编程 核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么 基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式 优点:复杂的问题流程化.进而简单化 ? 缺点:可扩展性差 2.面向对象 核心"对象"二字,对象指的是特征(变量)与技能(函数)的结合体,需要创造出一个个的具体存在的对象,程序的执行就是由对象直接交互完成 优点:可扩展性强 ? 缺点:编程的复杂度高于面向过程 7.1 类 7.11 定义类 1.类:对象是特

Python面向对象 类的空间问题

一.Python 类的空间问题 1.1 何处可以添加对象属性 class A: def __init__(self,name): self.name = name def func(self,sex): self.sex = sex # 类外面可以: obj = A('meet') obj.age = 18 print(obj.__dict__) # {'name': 'meet', 'age': 18} # 类内部也可以: obj = A('meet') # __init__方法可以. obj

python面向对象二

1.1类的静态属性,类方法,类的静态方法 1.1.1静态属性(@property) 在类中: python内置的@property装饰器就是负责把一个方法(函数)变成属性来调用. class Student: def __init__(self,name,age,score): self.name = name self.age = age self.score = score @property def get_score(self): return self.score def learn(