博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 学习小结
阅读量:4672 次
发布时间:2019-06-09

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

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

 

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

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

 

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

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

以Class Student为例:

class Student(object):    pass

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

def set_age(self, age):    self.age = ageStudent.set_age = set_age  # 这样即可!stu = Student()stu.set_age(18)print(stu.age) # 这里会得到18

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

import typesdef set_name(self, name):    self.name = namestu = Student()# stu.set_name = set_name # DONTstu.set_name = types.MethodType(set_name, stu) # 必须这样stu.set_name('LarryZeal')print(stu.name)

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

import typesdef set_name(self, name):    self.name = namestu = Student()stu.set_name = set_name # DONTstu.set_name('LarryZeal') # ERROR! 不知道self是什么print(stu.name)

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

 

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

print(type(stu.set_name))

一种是method,一种是function!

转载于:https://www.cnblogs.com/larryzeal/p/6361600.html

你可能感兴趣的文章
数学公式字体样式大全
查看>>
1.pyhon入门
查看>>
解题:POI 2008 Station
查看>>
JAVA开发第一步——JDK 安装
查看>>
javascript 原生事件综合查询
查看>>
[视频]产品营销之拍出好电子产品,Peter Belanger是如何为苹果产品拍照的
查看>>
PAT 1019. General Palindromic Number
查看>>
[Leetcode] Sudoku Solver
查看>>
在web项目启动时,使用监听器来执行某个方法
查看>>
前端笔试题【1】--从字符串的第二个字符开始对数组进行排序
查看>>
html 标签总结
查看>>
netstat 查看端口
查看>>
tcp关闭连接:挥手讨论
查看>>
Game HDU - 5242 树链思想
查看>>
结构模式--之--享元模式
查看>>
Solr文档
查看>>
c++文件結束符
查看>>
开发规范
查看>>
轻量级分布式文件系统FastDFS使用安装说明手册(新手入门级)
查看>>
body属性文本标记和排版标记
查看>>