免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2880 | 回复: 6
打印 上一主题 下一主题

初学请教:class变量为什么会出错? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-30 17:03 |只看该作者 |倒序浏览
class School:
    members=0
    def __init__(self):
        School.members += 1
        print School.members
    def __del__(self):
        School.members -= 1
        print School.members

t=School()
s=School()

为什么这个程序在__del__(self)中运行到School.members -= 1就出错了?
提示"global name 'School' is not defined"

论坛徽章:
0
2 [报告]
发表于 2007-03-30 21:16 |只看该作者
把School.members换成self.members

论坛徽章:
0
3 [报告]
发表于 2007-04-02 11:43 |只看该作者
楼上的应该是误解了楼主程序的意图吧。  

__del__(self)   的作用是在删除School实例时  输出 目前School实例的数目。  

代码是没有问题的。

论坛徽章:
0
4 [报告]
发表于 2007-04-02 16:04 |只看该作者
那就把那个类单独保存到一个模块中就可以了。

test1.py:
  1. class School:
  2.     members=0
  3.     def __init__(self):
  4.         School.members += 1
  5.         print School.members
  6.     def __del__(self):
  7.         School.members -= 1
  8.         print School.members
复制代码


test2.py
  1. from test1 import School
  2. t=School()
  3. s=School()
复制代码

[ 本帖最后由 wangcn 于 2007-4-3 17:28 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2007-04-03 14:16 |只看该作者
原帖由 lvscar 于 2007-4-2 11:43 发表
楼上的应该是误解了楼主程序的意图吧。  

__del__(self)   的作用是在删除School实例时  输出 目前School实例的数目。  

代码是没有问题的。


不错
但是为什么运行的时候会出错?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2007-04-03 15:00 |只看该作者
原帖由 firebat0 于 2007-4-3 14:16 发表

不错
但是为什么运行的时候会出错?

出错是因为类对象在实例对象之前销毁了的原因。目前还没有什么比较优雅的做法。
以前有人问过的,参考一下这里:
http://bbs.chinaunix.net/viewthread.php?tid=767395

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015亚冠之广州恒大
日期:2015-07-22 17:20:15
7 [报告]
发表于 2007-04-03 19:45 |只看该作者
看来python有必要引入 类似C里的 静态变量了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP