博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类与对象的命名空间
阅读量:7104 次
发布时间:2019-06-28

本文共 1690 字,大约阅读时间需要 5 分钟。

                                                                    类命名空间与对象、实例的命名空间

 

上回书说到类和对象,那么额在创建类或者对象的时候也会相应的产生各自的命名空间,而各自的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性

 

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

  • 静态属性就是直接在类中定义的变量
  • 动态属性就是定义在类中的方法

其中类的数据属性是共享给所有对象的

>>>id(egg.role)4341594072>>>id(Person.role)      #role是一个变量,在这里就是数据属性4341594072

 

而类的动态属性是绑定到所有对象的

>>>egg.attack
>>>>Person.attack
 

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

 

                                                                                                                                                          面向对象组合用法

 

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

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

复制代码

class Weapon:    def prick(self, obj):  # 这是该装备的主动技能,扎死对方        obj.life_value -= 500  # 假设攻击力是500class Person:  # 定义一个人类    role = 'person'  # 人的角色属性都是人    def __init__(self, name):        self.name = name  # 每一个角色都有自己的昵称;        self.weapon = Weapon()  # 给角色绑定一个武器;        egg = Person('egon')egg.weapon.prick() #egg组合了一个武器的对象,可以直接egg.weapon来使用组合类中的所有方法 上面人与武器的组合就是典型的组合使用方法 用组合的方式建立了类与组合的类之间的关系,它是一种‘有’的关系,比如我有手,手属于我,但是我不是手的集合。
class BirthDate:     def __init__(self,year,month,day):        self.year=year        self.month=month        self.day=dayclass Couse:    def __init__(self,name,price,period):        self.name=name        self.price=price        self.period=periodclass Teacher:    def __init__(self,name,gender,birth,course):
self.name=name         self.gender=gender         self.birth=birth         self.course=course
def 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) ''' 运行结果: 1 27 python 28000 4 months ''' 当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好
 

     

 

转载于:https://www.cnblogs.com/ddjl/p/8310453.html

你可能感兴趣的文章
http://blog.csdn.net/LANGXINLEN/article/details/50421988
查看>>
PHP高效率写法(详解原因)
查看>>
Swift 值类型/引用类型
查看>>
【WPF】点击滑动条(Slider),移动滑块(Tick)到鼠标点击的位置
查看>>
[每天五分钟,备战架构师-9]数据库系统
查看>>
[转]WinForm和WebForm下读取app.config web.config 中邮件配置的方法
查看>>
HDU-1903 Exchange Rates
查看>>
ado.net entity framework使用odp.net(ODAC for .net)连接oracle11g体验
查看>>
svn怎么版本还原?
查看>>
ABP源码分析三十七:ABP.Web.Api Script Proxy API
查看>>
Quartz 定时任务管理
查看>>
大公司都有哪些开源项目~~~简化版
查看>>
java生成word的完美解决方案
查看>>
ubuntu使用记录
查看>>
java生成zip压缩文件,解压缩文件
查看>>
我的Ajax服务端框架 - 安全问题,初始化设置,实现原理
查看>>
一位程序员的十个忠告
查看>>
[转]代理(Proxy)和委派(Delegate)的区别
查看>>
【JAVASCRIPT】js知识点整理1
查看>>
两天入门五天掌握,这样的laravel别告诉我难
查看>>