python 类函数定义是加 self 和不加的区别,且参数类型怎么变化的?

2015-12-08 23:39:30 +08:00
 dsp2138

class app():
def f(self,id):
return type(id)

此时需要实例化 app

a=app()
a.f(1)
<class 'int'>

如不进行实例化无法直接 app.f()
再看下面的
`
class app():
def f(self,id,*arg):
if type(id)==int:
return id,arg
else:
return type(id)

app.f(1,'aa')
<class 'str'>

这里 id 竟然被转换成了 str 类型,虽然直接被调用了,但类型怎么会这样了呢
如果进行实例化, id 就是 int 类型

a=app()
a.f(1,'a')
(1, ('a',))
`
怎么理解 self ,和后面参数的类型变化?
请教了

2432 次点击
所在节点    问与答
4 条回复
lxy42
2015-12-09 00:02:37 +08:00
建议看看 Python 文档或基础教程中关于类的 bind method 和 unbind method
lxy42
2015-12-09 00:14:05 +08:00
以及 static method, class method 。回到你的问题,在类中定义的方法“默认”都是实例方法,只能通过实例调用,如你定义的 f(self, id),只能通过实例 a 调用,执行 a.f(1),这里 self 参数等于 a , id 等于 1 。在你第二个例子中, app. f(1,'aa'),这是直接用类调用实例方法,所以 self 等于 1 , id 等于'aa',arg 等于空列表。
dsp2138
2015-12-09 20:12:21 +08:00
@lxy42
还有个问题,传入参数怎么限定为特定的类型!比方第一个参数就是 int 类型,第二个必须是 str ?
通过 if 判断有点麻烦,有更好的办法吗
lxy42
2015-12-09 23:35:38 +08:00
@dsp2138 python 是动态类型,没办法像静态类型语言那样定义函数 func(int n, string str)。只能通过 if 判断。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/242128

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX