调用python函数中的self可以用self吗

Pages: 1/2
主题 : 请教如何在C函数中取得self指针
级别: 骑士
可可豆: 1472 CB
威望: 1472 点
在线时间: 385(时)
发自: Web Page
请教如何在C函数中取得self指针&&&
我的意图是这样
void aCallbackFunction() {
[self.delegate xxx];
但是C函数中,不识别objective c 的self关键字,请教各位如何解决?
可可豆: 2197 CB
威望: 26361 点
在线时间: 5870(时)
发自: Web Page
参数中传进来
级别: 骑士
可可豆: 1472 CB
威望: 1472 点
在线时间: 385(时)
发自: Web Page
回 1楼(insul) 的帖子
问题是这是一个libcurl规定好的回调函数,参数也是固定的。
级别: 天使
发帖: 152450
可可豆: 2255414 CB
威望: 2255414 点
在线时间: 1736(时)
发自: Web Page
你赶巧了.....你懂的...extern &C& {&&&&&&&&void popAlertView()&&&&{&&&&&&&&testAll *test = [[testAll alloc] init];&&&&&&&&[test _testpopAlertView]; &&&&}&&&&}- (void) _testpopAlertView{}
我的博客:QQ:3122828,微博:@unity3
可可豆: 2197 CB
威望: 26361 点
在线时间: 5870(时)
发自: Web Page
不能加参数就弄个全局的变量吧
级别: 骑士
可可豆: 1472 CB
威望: 1472 点
在线时间: 385(时)
发自: Web Page
回 3楼(四角钱) 的帖子
谢版主,我试试!
级别: 骑士
可可豆: 1472 CB
威望: 1472 点
在线时间: 385(时)
发自: Web Page
全局变量会悲剧的,试过了= =b
级别: 骑士
可可豆: 1472 CB
威望: 1472 点
在线时间: 385(时)
发自: Web Page
回 3楼(四角钱) 的帖子
版主,不行阿,单纯是新建对象再调用是可以的,但是我需要的是self。
级别: 天使
发帖: 152450
可可豆: 2255414 CB
威望: 2255414 点
在线时间: 1736(时)
发自: Web Page
self在 - (void)里用.然后再做什么处理吧...我xcode零基础...你这个问题恰巧是我这两天抠代码看出来的..
我的博客:QQ:3122828,微博:@unity3
级别: 骑士
可可豆: 1472 CB
威望: 1472 点
在线时间: 385(时)
发自: Web Page
谢了,我想到另外的解决办法了
Pages: 1/2
关注本帖(如果有新回复会站内信通知您)
3*3+1 正确答案:10
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版python中怎么在一个函数内调用另外一个函数,类似C语言那样的_python吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:58,893贴子:
python中怎么在一个函数内调用另外一个函数,类似C语言那样的收藏
def printme(str):
# &打印任何传入的字符串&
print(str)然后在鼠标单击时间中调用(或者是其他自己写的函数)def on_selection_modified_async(self, view):
printme(&&)这样写的话会报错Traceback (most recent call last):
File &/Applications/Sublime Text.app/Contents/MacOS/sublime_plugin.py&, line 295, in on_selection_modified_async
callback.on_selection_modified_async(v)
File &/Users/songrao/Library/Application Support/Sublime Text 3/Packages/User/event.py&, line 74, in on_selection_modified_async
printme(&12346&)NameError: global name 'printme' is not defined
定义在前,调用在后。
srlf.fnuc()
def a(): pass def b(self): a()or def a(self): passdef b(self): self.a()
嗯,前面用个self就可以了,但是怎么传递参数呢,如果我在括号里写了参数传给str也会报错,如果不写参数,就只有一个括号就是可以调用的,新手求解答!就是说我把“”传进去,要能够打印
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或Python新手问个调用成员函数的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
已注册用户请 &
推荐学习书目
Python Sites
值得关注的项目
Python 编程
Python新手问个调用成员函数的问题
18:37:39 +08:00 · 4572 次点击
在父函数中调用子函数的成员函数, 遇到个问题, 代码如下class Foo(object):
def __init__(self):
self._func = None
def callDerivedFunc(self):
# self._func() # wrong
method = self._func
method(self) # rightclass Bar(Foo):
def __init__(self):
super(Foo, self).__init__()
self._func = Bar.hello
def hello(self):
print 'Hello'bar = Bar()bar.callDerivedFunc()一直以为这两种调用方法是一样的, 求教两者区别的详细解释
7 回复 &| &直到
08:00:00 +08:00
& & 18:52:18 +08:00
直接调用 self._func() 的话,python 应该是优先查找 self 里面有没有 _func 这个方法,它发现没有,所以就出错了。
& & 18:56:40 +08:00
def callDerivedFunc(self):
getattr(self, '_func')(self)
& & 19:17:39 +08:00
@ 试了这样可以, 应该是和上面正确的调用形式一样
& & 19:23:54 +08:00
self._func = Bar.hello
这一行将Bar类的hello函数赋值给self._func变量,而不是实例的hello函数,而hello函数是一个实例方法。
method(self)调用没有错误,是因为给Bar.hello传递了一个实例,相当于:Bar.hello(bar)
self._func()调用出错,是因为没有Bar.hello传递实例,相当于:Bar.hello()。所以会报错:&TypeError: unbound method hello() must be called with Bar instance as first argument (got nothing instead)&
修改方法:
def __init__(self):
super(Foo, self).__init__()
self._func = Bar.hello
改成:
def __init__(self):
super(Foo, self).__init__()
self._func = self.hello
同时:
method(self)
改成:
method()
self._func() # wrong
改成:
self._func(self) # wrong
& & 19:31:20 +08:00
用gist做了个好看版:D
&script src=&/4433964.js&&&/script&
& & 19:38:22 +08:00
上面那个失败了,重新学习了一下:
& & 20:19:01 +08:00
@ thx, 是我混淆了直接调用成员函数和把成员变量当成函数调用的方法, 一开始还以为是self用法的问题...
& · & 1745 人在线 & 最高记录 1893 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.7.3 · 41ms · UTC 03:14 · PVG 11:14 · LAX 20:14 · JFK 23:14? Do have faith in what you're doing.为什么 Tornado 在调用 self.finish() 以后不终止 RequestHandler 中相关处理函数的运行?
一个很简单的程序:&blockquote&import tornado.ioloop&br&import tornado.web&br&&br&class MainHandler(tornado.web.RequestHandler):&br&
def get(self):&br&
self.finish()&br&
self.write(&Hello, world&)&br&&br&application = tornado.web.Application([&br&
(r&/&, MainHandler),&br&])&br&&br&if __name__ == &__main__&:&br&
application.listen(8888)&br&
tornado.ioloop.IOLoop.instance().start()&/blockquote&&br&如果我们访问的话,Tornado会报错,Trackback如下:&blockquote&Traceback (most recent call last):&br&
File &C:\Python27\lib\site-packages\tornado\web.py&, line 927, in _execute&br&
getattr(self, self.request.method.lower())(*args, **kwargs)&br&
File &I:\party\test.py&, line 9, in get&br&
self.write(&Hello, world&)&br&
File &C:\Python27\lib\site-packages\tornado\web.py&, line 442, in write&br&
assert not self._finished&br&AssertionError&br&ERROR:root:Cannot send error response after headers written&/blockquote&&br&很显然,在我们调用self.finish()以后,RequestHandler的处理函数继续向下执行了,从而导致了错误的发生。&br&&br&那么,为什么在调用self.finish()以后,Tornado不自动终止函数的执行呢?&br&&br&另外,知乎对这种情况是怎么处理的?我现在的做法是在self.redirect()以后加一句return,不知道合适不合适。&br&&br&self.redirect内部同样调用了self.finish,也会出现这样的问题。而且对于用户来说,执行self.redirect以后发送Location Header,用户就被跳转走了,继续执行是没有意义的。
一个很简单的程序:import tornado.ioloopimport tornado.webclass MainHandler(tornado.web.RequestHandler):
def get(self):
self.finish()
self.write("Hello, world")application = tornado.web.Application([
(r"/", MainHandler),])if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()如果我们访问的话,Tornado会报错,Trackback如下:Traceback (most recent call last):
File "C:\Python27\lib\site-packages\tornado\web.py", line 927, in _execute
getattr(self, self.request.method.lower())(*args, **kwargs)
File "I:\party\test.py", line 9, in get…
按投票排序
self.finish()代表回应生成的终结,并不代表着请求处理逻辑的终结。假设你有一个block的逻辑是和回应无关的,那么放在self.finish()的后面可以显著的缩短响应时间。所以,如果你确定自己的逻辑需要立即返回,可以在self.finish()后立刻return。Tornado在将这个自由留给了你自己。另外一个理由是,在call stack里让顶端的函数去弹出一个非顶端的函数,这个逻辑有点奇怪。唯一能够提供退出的机制就是异常了。但是在正常逻辑里面使用异常去实现一个功能,也是很怪的逻辑。
同理还有self.render/self.write 我们在所有这种response语句前加return 例如
return self.redirect('/')
为什么finish 后要终止函数运行呢? finnish 以后你可以做任何其他的事情,做self.write 错误 是因为和前端的此次http 交互结束了,做其他事情还是可以的。
已有帐号?
无法登录?
社交帐号登录}

我要回帖

更多关于 ios 静态方法调用self 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信