1
ruoyu0088 2015-11-23 12:47:28 +08:00
你用的是 Python2 还是 Python3?
|
3
ruoyu0088 2015-11-23 12:55:54 +08:00
先不说 str 这种内置类型,例如如果你自己定义了一个类 A ,它有一个方法 func1(self), func1 实际上就是一个普通的函数保存在 A.__dict__中,如果你运行 A.func1 就得到这个函数,然后 A.func1(...),就调用这个函数。其第一个参数可以是任何对象,甚至不需要是 A 的实例。
在 Python 中函数定义了__get__方法,当你调用 a.func1 时,实际上得到的是调用 func1.__get__的返回值,它是一个 bound method 对象,该对象的__func__,__self__属性分别保存 A.func1 对象和 A 的实例 a ,而调用该对象时就会运行 A.func1(a)。 |
4
rebornix 2015-11-23 12:58:40 +08:00
https://hg.python.org/cpython/file/tip/Lib/string.py#l231
def upper(s): """upper(s) -> string Return a copy of the string s converted to uppercase. """ return s.upper() str.upper("hello") 的实现可不就是 "hello".upper() 么 |
5
knightdf 2015-11-23 13:01:54 +08:00
你应该知道有种东西叫 self
|
7
Frapples 2015-11-23 15:47:01 +08:00
还记得在定义方法时需要显示声明 self 参数吗?"hello".upper()这样写 python 会帮你隐式的传递 self 参数,和 str.upper("hello")效果是一样的,但是写成 "hello".upper()更有“感觉”,这种写法其实是一种语法糖。
|
8
Frapples 2015-11-23 15:49:05 +08:00
上面打字打错了,显示->显式,抱歉。
|
9
hbkdsm 2015-11-23 17:31:48 +08:00
Ruby 大法好,压根就没有函数,全是方法
|
11
MyLeoWind OP |