Python学习_面向对象(OOP)一:类的实现机制

先看几个例子,C++码农可能会觉得不可思议:

一:对象与实例是两种不同的类型

class A:pass
a1=A()
a2=A()
print type(a1)==type(a2)   #True
print type(a1)==type(A)    #False  

二:可以在类之外为类增加成员和成员函数

import sys
class A:pass
a=A()
A.data="hello world"
A.output=lambda self:sys.stdout.write(self.data+"\n")
a.output()	#输出:hello world

三:可以通过对象调用/改变成员,但不一定会影响实例

class A: a=8
a1=A()
a2=A()
print A.a,a1.a,a2.a    #8,8,8
A.a=7
print A.a,a1.a,a2.a    #7,7,7
a1.a=6
print A.a,a1.a,a2.a    #7,6,7
A.a=5
print A.a,a1.a,a2.a    #5,6,5

四:不能通过参数的数量,类型或返回值重载函数(或成员函数)

class A:
    def func(self):pass
    def func(self,arg):pass #此时第一个func已经被覆盖,甚至被回收了
a=A()
a.func(6)    #ok
a.func()      #Err

五:python类的实现机制:

     python的类实质上只是一个命名空间,更具体地说,只是一个普通的字典, 对象字典中包含各个成员和成员函数, 实例开始时仅是一个空字典,通过__class__指向对象,对象再通过__bases__指向基类,每次调用只是依次对实例字典,对象字典,父类字典进行搜索, 仅此而已.

    思考:python是解释性语言,没有编译的过程,包括类,函数,成员函数等各种概念并没有限定(也无法限定)格式, 仅仅是规定了如何去运行,例如类成员函数的运行方式:1,取首参数,2(如果有)取其余参数 3,依次运行函数在的语句 , 至于能否运行成功python并不关心(不成功就报错呗). 而且python没有隐藏实现的细节,类似于__class__这种实现层面的对象都可以随意修改, 因此python可以完成许多C++做不到的事, 但最好还是不要这样,否则马上你就会发现自己代码跟一坨翔一样自己都看不懂了大笑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值