请动手在一个类中定义一个变量,用于跟踪该类有多少个实例被创建
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
2.
class A:
count=0
def __init__(self):
count+=1
def __del__(self):
count-=1
a=A()
b=A()
c=A()
A.count()
我想问一下我写的代码和答案中的代码有什么区别,为什么我的是错的? 本帖最后由 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是属性,你加()会报错 count是一个类对象,类对象只能由类访问,必须加上C.。
这里 count = 0 是属于类变量(也称类属性)
调用类属性时候必须加上类名,而你直接对 count+=1 或count-=1 会报错 NameError
xiaosi4081 发表于 2020-6-18 12:50
你写的是错的
你写的也是错的 , count 是属性不是方法 你加上 () 会报错
还有题目是统计实例化了多少对象,而你这样做每次都是初始化了 count + = 1 不能达到统计的效果
xiaosi4081 发表于 2020-6-18 12:50
你写的是错的
你这里说调用类属性的时候必须加上类名,那为什么你写的代码中用的是self.count而不是A.count呢?在这个程序中self.count和A.count的作用有什么区别呢 本帖最后由 波大大12138 于 2020-6-18 17:14 编辑
Twilight6 发表于 2020-6-18 13:00
你写的也是错的 , count 是属性不是方法 你加上 () 会报错
还有题目是统计实例化了多少对象,而 ...
1.还有一个问题我想问一下:答案的代码中有一个del a,也就是删去了一个变量,那么他在执行C.count的时候为什么就会自动的去执行第二个方法下的c.count的程序呢?他也没有调用第二个方法啊?因为答案中两个方法下都有一个c.count,他在没有调用方法的情况下,为什么会知道去执行哪一个指令这个不太清楚
2.我上一楼对人家答案的疑问人家也没回复,能解答一下嘛 波大大12138 发表于 2020-6-18 17:01
1.还有一个问题我想问一下:答案的代码中有一个del a,也就是删去了一个变量,那么他在执行C.count的时 ...
@Twilight6 波大大12138 发表于 2020-6-19 09:03
@Twilight6
....你不应该去问你认为最佳答案的吗?怎么问我了?....
答案的代码中有一个del a,也就是删去了一个变量,那么他在执行C.count的时候为什么就会自动的去执行第二个方法下的c.count的程序呢?因为答案中两个方法下都有一个c.count,他在没有调用方法的情况下,为什么会知道去执行哪一个指令这个不太清楚
魔法方法就是这样的,__del__魔法方法会自动捕获你对这个类 使用 del 函数时候的操作
Twilight6 发表于 2020-6-19 09:17
魔法方法就是这样的,__del__魔法方法会自动捕获你对这个类 使用 del 函数时候的操作
好的(๑′ㅂ`๑){:5_91:}
页:
[1]