博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向对象 组合
阅读量:4709 次
发布时间:2019-06-10

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

回顾:类命名空间与对象,实例的命名空间

  类的属性:静态属性和动态属性(方法)

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

    动态属性(方法):就是定义在类中的方法(函数)

  注意:类的属性是共享给所以的对象的,而类的动态属性是绑定到所有对象的

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

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

面向对象的组合用法

  软件重要的方式:组合  继承

  组合指的是,指一个类的对象作为另一个类对象的属性。使俩个类之间产生关系

 经典例题:

 

# class Foo:#     count = 0#     def __init__(self):#         self.count += 1# f1 = Foo()# f2 = Foo()# print(Foo.count)  # 0    类的方法调用# print(f1.count)   # 1    对象f1对类方法调用    # print(f2.count)    #1     对象f2 对类方法的调用#这是俩个不同的对象所以,调用的结果都是为1

 

例:请你写一个类,能够统计一共实例化了多少个对象?
class Foo:    count = 0    def __init__(self):        Foo.count += 1       #生成一个对象就会是将类(Foo)的属性+1f1 = Foo()    print(f1.count)    #1f2 = Foo()f3= Foo()print(f1.count)    #3print(f3.count)    #3

当类中属性发生改变的时候,对象中没有同名的属性。方法的时候,对象使用的属性名会跟着类中的变量走

class Foo:    count = [0]f1 = Foo()f1.count[0]+= 1 print(f1.count[0])      #1print(Foo.count)        #[1]f1.count = [2]          #这部操作是给f1这个对象空间中增加属性。print(Foo.count)        #[1]

只要对象的某个属性被直接赋值,那么一定是对象的命名空间发生了变化

所以结论:只要是静态变量,就直接用类名进行操作

 

转载于:https://www.cnblogs.com/yuncong/p/9532075.html

你可能感兴趣的文章
Timeout 时间已到。在操作完成之前超时时间已过或服务器未响应。
查看>>
获取两个时间之间的天数
查看>>
springboot 学习之路 2(注解介绍)
查看>>
vue项目引入自定义.css的样式文件
查看>>
RabbitMQ 将监听的IP从localhost修改为指定IP
查看>>
LeetCode-Trapping Rain Water-下雨积水-单调队列应用
查看>>
.Net 程序在自定义位置查找托管/非托管 dll 的几种方法
查看>>
ADO.net简单增删改查
查看>>
申请苹果开发者账号
查看>>
mysql的表锁和行锁,排他锁和共享锁。
查看>>
安装cartographer
查看>>
Java语法训练-打印各种三角形
查看>>
spring-dao.xml配置问题(一)
查看>>
SQLServer语句大使
查看>>
The Run-Time Constant Pool The Constant Pool
查看>>
剑指Offer-用两个栈实现队列
查看>>
Picker 移动端下拉框
查看>>
erlang局域网内通信
查看>>
ELMAH记录太多404错误,导致数据库超级大
查看>>
python接口自动化测试三十三:获取时间戳(10位和13位)和昨天、今天、明天
查看>>