python 财务工作总结_Python 学习小结

假期闲来无事,捡起Python再看一遍,略有收获,记载如下。

首先,Python中有function和method的区别,从types.MethodType和types.FunctionType就可以看出,其区别在于method是Class中的函数,但只能叫方法;此外的函数都是function。

其次,Python是动态语言,也就是鸭子类型:只要看起来像鸭子,举止行为像鸭子,那就认为这是鸭子。这就是Python的多态,与Java明显不同。

Python也有Class和instance的区别:前者是抽象,后者是实例。

与Java不同的是,Python支持动态的添加属性(值或者方法/函数,值没有好说的,这里我们只讨论函数/方法):可以给instance添加属性(仅用于当前对象),也可以给Class添加属性(可用于所有对象)!

以Class Student为例:

classStudent(object):pass

给Student类本身添加方法很简单,只需要定义一个方法,然后将其赋予Student的属性即可!唯一需要记住的是,方法的第一个参数必须是self。如下:

defset_age(self, age):

self.age=age

Student.set_age= set_age #这样即可!

stu=Student()

stu.set_age(18)print(stu.age) #这里会得到18

而给Student的instance添加属性方法则比较麻烦,需要将定义的函数转成MethodType,再赋予Student的instance的属性。同样的,方法的第一个参数必须是self。如下:

importtypesdefset_name(self, name):

self.name=name

stu=Student()#stu.set_name = set_name # DONT

stu.set_name = types.MethodType(set_name, stu) #必须这样

stu.set_name('LarryZeal')print(stu.name)

至于必须转成MethodType的原因,可以通过执行上面被注释掉的代码来说明:

importtypesdefset_name(self, name):

self.name=name

stu=Student()

stu.set_name= set_name #DONT

stu.set_name('LarryZeal') #ERROR! 不知道self是什么

print(stu.name)

就是说,直接调用的是function,而非method。个人认为,二者的区别在于self:Class会主动将对象绑定到self,其他的不会!

按照这个推测,其实可以输出下上面两种情况的属性的type:

print(type(stu.set_name))

一种是method,一种是function!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值