波大大12138 发表于 2020-6-18 12:47:18

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

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 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是属性,你加()会报错

qiuyouzhi 发表于 2020-6-18 12:52:27

count是一个类对象,类对象只能由类访问,必须加上C.。

Twilight6 发表于 2020-6-18 12:59:03


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

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

Twilight6 发表于 2020-6-18 13:00:43

xiaosi4081 发表于 2020-6-18 12:50
你写的是错的


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

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

波大大12138 发表于 2020-6-18 16:09:32

xiaosi4081 发表于 2020-6-18 12:50
你写的是错的




你这里说调用类属性的时候必须加上类名,那为什么你写的代码中用的是self.count而不是A.count呢?在这个程序中self.count和A.count的作用有什么区别呢

波大大12138 发表于 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.我上一楼对人家答案的疑问人家也没回复,能解答一下嘛

波大大12138 发表于 2020-6-19 09:03:35

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

@Twilight6

Twilight6 发表于 2020-6-19 09:13:47

波大大12138 发表于 2020-6-19 09:03
@Twilight6

....你不应该去问你认为最佳答案的吗?怎么问我了?....

Twilight6 发表于 2020-6-19 09:17:19



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

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


波大大12138 发表于 2020-6-19 09:24:06

Twilight6 发表于 2020-6-19 09:17
魔法方法就是这样的,__del__魔法方法会自动捕获你对这个类 使用 del 函数时候的操作

好的(๑′ㅂ`๑){:5_91:}
页: [1]
查看完整版本: 请动手在一个类中定义一个变量,用于跟踪该类有多少个实例被创建