python基础 13 类命名空间于对象、实例的命名空间,组合方法

1.类命名空间于对象、实例的命名空间

创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性

而类有两种属性:静态属性和动态属性

  • 静态属性就是直接在类中定义的变量
  • 动态属性就是定义在类中的方法
#其中类的数据属性是共享给所有对象的
#而类的动态属性是绑定到所有对象的

创建一个对象/实例就会创建一个对象/实例的名称空间,存放对象/实例的名字,称为对象/实例的属性

在obj.name会先从 obj 自己的名称空间里找name,找不到则去类中找,类也找不到就找父类...最后都找不到就抛出异常

2.面向对象的组合用法

软件重用的重要方式除了继承之外还有另外一种方式,即:组合

组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合

class Dog:  # 定义一个狗类role = 'dog'  # 狗的角色属性都是狗def __init__(self, name, breed, aggressivity, life_value):self.name = name  # 每一只狗都有自己的昵称;self.breed = breed  # 每一只狗都有自己的品种;self.aggressivity = aggressivity  # 每一只狗都有自己的攻击力;self.life_value = life_value  # 每一只狗都有自己的生命值;def bite(self,people):# 狗可以咬人,这里的狗也是一个对象。# 狗咬人,那么人的生命值就会根据狗的攻击力而下降dog.life_value -= self.aggressivitclass Weapon:def prick(self, obj):  # 这是该装备的主动技能,扎死对方obj.life_value -= 500  # 假设攻击力是500class Person:  # 定义一个人类role = 'person'  # 人的角色属性都是人def __init__(self, name):self.name = name  # 每一个角色都有自己的昵称;self.weapon = Weapon()  # 给角色绑定一个武器;
xiaobai = Dog('xiaobai','泰迪',100,1000)
egg = Person('egon')
egg.weapon.prick()
#egg组合了一个武器的对象,可以直接egg.weapon来使用组合类中的所有方法

圆环是由两个圆组成的,圆环的面积是外面圆的面积减去内部圆的面积。圆环的周长是内部圆的周长加上外部圆的周长。 这个时候,我们就首先实现一个圆形类,计算一个圆的周长和面积。然后在"环形类"中组合圆形的实例作为自己的属性来用

from math import piclass Circle:'''定义了一个圆形类;提供计算面积(area)和周长(perimeter)的方法'''def __init__(self,radius):self.radius = radiusdef area(self):return pi * self.radius * self.radiusdef perimeter(self):return 2 * pi *self.radiuscircle =  Circle(10) #实例化一个圆
area1 = circle.area() #计算圆面积
per1 = circle.perimeter() #计算圆周长
print(area1,per1) #打印圆面积和周长class Ring:'''定义了一个圆环类提供圆环的面积和周长的方法'''def __init__(self,radius_outside,radius_inside):self.outsid_circle = Circle(radius_outside)self.inside_circle = Circle(radius_inside)def area(self):return self.outsid_circle.area() - self.inside_circle.area()def perimeter(self):return  self.outsid_circle.perimeter() + self.inside_circle.perimeter()ring = Ring(10,5) #实例化一个环形
print(ring.perimeter()) #计算环形的周长
print(ring.area()) #计算环形的面积

用组合的方式建立了类与组合的类之间的关系,它是一种‘有’的关系,比如教授有生日,教授教python课程

class BirthDate:def __init__(self,year,month,day):self.year=yearself.month=monthself.day=dayclass Couse:def __init__(self,name,price,period):self.name=nameself.price=priceself.period=periodclass Teacher:def __init__(self,name,gender,birth,course):self.name=name self.gender=genderself.birth=birthself.course=coursedef teach(self): print('teaching')p1=Teacher('egon','male', BirthDate('1995','1','27'), Couse('python','28000','4 months')) print(p1.birth.year,p1.birth.month,p1.birth.day) print(p1.course.name,p1.course.price,p1.course.period)
'''
运行结果:
27
python 28000 4 months
'''

当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好

命名空间_python基础 13 类命名空间于对象、实例的命名空间,组合方法相关推荐

  1. [Scala基础]-- 伴生类和伴生对象

    Scala比 Java 更面向对象的一个方面是 Scala 没有静态成员.替代品是,Scala 有: 单例对象:singleton object. 除了用 object 关键字替换了 class 关键 ...

  2. java dom获取命名空间属性_java – 如何在XML DOM对象中添加命名空间前缀?

    我正在尝试使用特定的命名空间来构建一个 XML文档.我想要生成的最终文档应该是这样的: token token token 这是我到目前为止. Document document = Document ...

  3. list 相加_Python 基础 list类、运算符

    从最初的"Hello World",走到面向对象.该回过头来看看,教程中是否遗漏了什么. 我们之前提到一句话,"Everything is Object". 那 ...

  4. python实战经典例子_Python基础之列表常见操作经典实例详解

    本文实例讲述了Python基础之列表常见操作.分享给大家供大家参考,具体如下: Python中的列表操作 列表是Python中使用最频繁的数据类型[可以说没有之一] 一组有序项目的集合 可变的数据类型 ...

  5. python基础程序设计与面向对象程序设计_python基础——面向对象的程序设计

    python基础--面向对象的程序设计 1 什么是面向对象的程序设计 面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...

  6. python中关于命名的例子_Python()-类命名空间和对象/实例命名空间

    类命名空间和对象/实例命名空间: 创建类, 就会创建一个类的名称空间, 空间:存储类的属性 属性: 静态属性:直接定义在类下面 & 和类名关联 的变量 对象属性:在类内和self关联 & ...

  7. python类的命名空间_Python之关于类变量的两种赋值区别详解

    我就废话不多说了,还是直接看代码吧! # -*- coding:utf-8 -*- #面试题,写一个方法,将一行字符串中所有的单词数量统计出来 class Person(object): TAG = ...

  8. el 能否定义作用域变量_Python 基础知识全篇-命名空间和作用域

    命名空间 先看看官方文档的一段话: A namespace is a mapping from names to objects.Most namespaces are currently imple ...

  9. python程序开发的各个阶段_python基础----面向对象的程序设计(五个阶段、对小白的忠告、关于OOP常用术语)、类、对象...

    抽象指对现实世界问题和实体的本质表现,行为和特征建模,建立一个相关的子集,可以用于 绘程序结构,从而实现这种模型.抽象不仅包括这种模型的数据属性,还定义了这些数据的接口. 对某种抽象的实现就是对此数据 ...

最新文章

  1. IDEA 强大的 Live Templates,代码生成利器
  2. jmeter 监听的介绍
  3. 【Java深入理解】String str = “a“ + “b“ + “c“到底创建了几个对象?
  4. 小白来学C语言之宏定义(#define)
  5. 2018.12.26 作业
  6. express 4.x 获取post提交的数据
  7. 【CSS3】纯CSS代码实现模拟时钟,+js对时功能。
  8. 【渝粤教育】电大中专跨境电子商务理论与实务 (31)作业 题库
  9. Android 应用FPS测试方法介绍
  10. 关于NaN、undefined、null——基础必懂
  11. 百度云c++语言模拟器,C++语言基础教程
  12. 总结--linux常用配置文件总结
  13. ISO8601标准时间格式
  14. 洛谷 P1129 矩阵游戏
  15. tomcat启动后出现乱码解决
  16. Php静默授权,【公众号】微信第三方登录(静默授权和非静默授权)(具体代码:U盘 新浪云SAE)...
  17. 双鱼与水瓶会有未来吗(图
  18. Swiper + 图片懒加载
  19. Synchronized锁升级底层原理
  20. hdoj 1234 开门人和关门人

热门文章

  1. java中对象的生存期_Java中对象的生存周期
  2. 华为鸿蒙系统是否上线,网友曝华为鸿蒙系统已经上线!官方回应:空欢喜一场...
  3. 文件包含——本地无视后缀(二)
  4. html缩略文本,列表中展示富文本的缩略内容
  5. Android开发之引用三方库导致SO库冲突的解决办法
  6. Android开发之EdittText输入0开头金额的限制算法
  7. Android开发之获取通知栏的内容
  8. java调用python库pyd_Java调用Python的两种方式
  9. PHP爬虫音乐,PHPCrawl爬虫库实现抓取酷狗歌单
  10. LNMP1.3 一键配置环境,简单方便