免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: tianshizhiluan
打印 上一主题 下一主题

请问 "luffy.deng": 如何访问属性(一句话描述不清楚) [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-08-24 08:16 |只看该作者
回复 7# tianshizhiluan
性能会不会下降很多得测了才知道。不行的话可以用shhgs的办法试一下。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
12 [报告]
发表于 2010-08-24 09:51 |只看该作者
回复 3# shhgs

首先建议回帖前看贴,这是基本论坛美德,你的代码根本就没有完成我需要的功能。

你的代码里存在一个性能问题,例如下面这样的代码:

x = u_definition(..)

print x.foo for key in vars(x)  #每次这个实例都会被生成一次,然后释放。这种情况在系统负载较高的情况下会非常糟糕。




这是我的代码,有更好的扩展性。
  1. # def to_obj(dct, test_key, descriptor):
  2. #     x = type('xo0pP', (object,), dict())
  3. #

  4. #     for key in dct.keys():
  5. #         if test_key(dct[key]):
  6. #             setattr(x, key, descriptor(dct[key]))
  7. #             pass
  8. #         else:
  9. #             setattr(x, key, to_obj(dct[key], test_key, descriptor))
  10. #             pass
  11. #         pass
  12. #     return x
复制代码

论坛徽章:
0
13 [报告]
发表于 2010-08-24 11:04 |只看该作者
回复 10# luffy.deng


    这是一个bug。写get写的太顺手了。

不过我还是坚持我的看法。meta programming 不是为这种目的设计的。这是在滥用Py的fetaure。

不过话又得说回来,feature设计出来,就是给人滥用的。

论坛徽章:
0
14 [报告]
发表于 2010-08-24 11:10 |只看该作者
回复  shhgs

首先建议回帖前看贴,这是基本论坛美德,你的代码根本就没有完成我需要的功能。

你的代 ...
tianshizhiluan 发表于 2010-08-24 09:51


你关于性能的评论,充分揭示了你对Py的无知。

而那段代码。我只能评价,烂!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
15 [报告]
发表于 2010-08-24 11:19 |只看该作者
回复 14# shhgs


    确实如此,不过我还是坚持:回帖前请看贴。

论坛徽章:
0
16 [报告]
发表于 2010-08-24 11:28 |只看该作者
回复  shhgs

首先建议回帖前看贴,这是基本论坛美德,你的代码根本就没有完成我需要的功能。

你的代 ...
tianshizhiluan 发表于 2010-08-24 09:51



先说小问题
1 你的函数名字起的不是一般的差。
2 那三个pass都多余

接着,回答你的问题
1. 你所谓的功能,无法是在result的外面加一个 descriptor。
2. 你所谓的性能,无非是递归调用之后加一个setattr

最后,最大的问题。meta programming不是为这个准备的。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
17 [报告]
发表于 2010-08-24 11:35 |只看该作者
回复 16# shhgs


    关于代码风格,我觉得那是个人的事情,看看pep上关于python的命名的约定,说函数最好遵循foo_bar风格,但是看看python内置的名字setattr,getattr,唉,bsd风格,他们自己都说不清除

    真心请教,meta编程具体是怎么个事情,能给些链接或者是代码解释一些吗?谢谢

论坛徽章:
0
18 [报告]
发表于 2010-08-24 22:17 |只看该作者
test_key还将就
descriptor真的是糟透了。

descriptor是Py的一个术语,有专门的用途的。你这个函数,只不过是对返回值作一些后处理而已。起这么一个名字,简直莫名其妙。

这里可以用post_process

当然,编程风格是你自己的事情。你完全可以无视我的看法。

论坛徽章:
0
19 [报告]
发表于 2010-08-25 08:03 |只看该作者
本帖最后由 luffy.deng 于 2010-08-25 08:22 编辑

回复 18# shhgs
   
回复  luffy.deng


    这是一个bug。写get写的太顺手了。

不过我还是坚持我的看法。meta programm ...
shhgs 发表于 2010-08-24 11:04


meta programming 不是为这种目的设计  这个观点我是同意的,我只是说用meta可以很好的解决这个问题。就当学习一下fetaure也没什么不好。
你所写的代码 即使是抛开对不存在的属性访问的bug不说也是有问题的,比如对于下面这个字典,是得不到30的。

  1. d= {'a':1,
  2.     '__str__':30,
  3.     'c':{'e':1,
  4.        }
  5.     }
  6. ......
  7. foo=dictToObject(d)
  8. print foo.__str__
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
20 [报告]
发表于 2010-08-25 08:48 |只看该作者
谢谢你们。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP