鱼C论坛

 找回密码
 立即注册
查看: 1497|回复: 10

[已解决]请动手在一个类中定义一个变量,用于跟踪该类有多少个实例被创建

[复制链接]
发表于 2020-6-18 12:47:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.[code
]class C:
        count = 0
        
        def __init__(self):
                C.count += 1

        def __del__(self):
                C.count -= 1

>>> a = C()
>>> b = C()
>>> c = C()
>>> C.count
3
>>> del a
>>> C.count
2
>>> del b, c
>>> C.count
0
[/code]
2.
class A:
    count=0
    def __init__(self):
        count+=1
    def __del__(self):
        count-=1

a=A()
b=A()
c=A()
A.count()
我想问一下我写的代码和答案中的代码有什么区别,为什么我的是错的?
最佳答案
2020-6-18 12:52:27
count是一个类对象,类对象只能由类访问,必须加上C.。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-18 12:50:41 | 显示全部楼层
本帖最后由 xiaosi4081 于 2020-6-18 13:02 编辑

你写的是错的
class A:
    count=0
    def __init__(self):
        self.count+=1
    def __del__(self):
        self.count-=1

a=A()
b=A()
c=A()

a.count
这里 count = 0 是属于类变量(也称类属性)

调用类属性时候必须加上类名,而你直接对 count+=1 或  count-=1 会报错 NameError

还要有count是属性,你加()会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-18 12:52:27 | 显示全部楼层    本楼为最佳答案   
count是一个类对象,类对象只能由类访问,必须加上C.。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-18 12:59:03 | 显示全部楼层

这里 count = 0 是属于类变量(也称类属性)

调用类属性时候必须加上类名,而你直接对 count+=1 或  count-=1 会报错 NameError

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-18 13:00:43 | 显示全部楼层



你写的也是错的 , count 是属性不是方法 你加上 () 会报错

还有题目是统计实例化了多少对象,而你这样做每次都是初始化了 count + = 1 不能达到统计的效果

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-6-18 16:09:32 | 显示全部楼层

你这里说调用类属性的时候必须加上类名,那为什么你写的代码中用的是self.count而不是A.count呢?在这个程序中self.count和A.count的作用有什么区别呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-18 17:01:15 | 显示全部楼层
本帖最后由 波大大12138 于 2020-6-18 17:14 编辑
Twilight6 发表于 2020-6-18 13:00
你写的也是错的 , count 是属性不是方法 你加上 () 会报错

还有题目是统计实例化了多少对象,而 ...


1.还有一个问题我想问一下:答案的代码中有一个del a,也就是删去了一个变量,那么他在执行C.count的时候为什么就会自动的去执行第二个方法下的c.count的程序呢?他也没有调用第二个方法啊?因为答案中两个方法下都有一个c.count,他在没有调用方法的情况下,为什么会知道去执行哪一个指令这个不太清楚
2.我上一楼对人家答案的疑问人家也没回复,能解答一下嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-19 09:03:35 | 显示全部楼层
波大大12138 发表于 2020-6-18 17:01
1.还有一个问题我想问一下:答案的代码中有一个del a,也就是删去了一个变量,那么他在执行C.count的时 ...

@Twilight6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-19 09:13:47 | 显示全部楼层


....你不应该去问你认为最佳答案的吗?  怎么问我了?....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-19 09:17:19 | 显示全部楼层


答案的代码中有一个del a,也就是删去了一个变量,那么他在执行C.count的时候为什么就会自动的去执行第二个方法下的c.count的程序呢?因为答案中两个方法下都有一个c.count,他在没有调用方法的情况下,为什么会知道去执行哪一个指令这个不太清楚


魔法方法就是这样的,__del__魔法方法会自动捕获你对这个类 使用 del 函数时候的操作


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-6-19 09:24:06 | 显示全部楼层
Twilight6 发表于 2020-6-19 09:17
魔法方法就是这样的,__del__魔法方法会自动捕获你对这个类 使用 del 函数时候的操作

好的(๑′ㅂ`๑)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 13:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表