zoukankan      html  css  js  c++  java
  • Python练习--统计总共实例化了多少个对象

    需求:有一个计数器(属性),统计总共实例化了多少个对象

    代码如下:

     1 class Student:
     2     school = 'Luffycity'
     3     count = 0
     4 
     5     def __init__(self, name, age, sex):
     6         self.name = name
     7         self.age = age
     8         self.sex = sex
     9         self.count += 1
    10 
    11     def learn(self):
    12         print('%s is learning' % self.name)
    13 
    14 stu1 = Student('alex', 'male', 38)
    15 stu2 = Student('jinxin', 'female', 78)
    16 stu3 = Student('Egon', 'male', 18)
    17 
    18 print(Student.count)
    19 print(stu1.count)
    20 print(stu2.count)
    21 print(stu3.count)

    结果为:

    0
    1
    1
    1

    从以上结果可以看出,如果写成self.count ,他就会变成对象的私有属性,所以说虽然实例化了3次,但是类的count值为0,每个对象的count值为1

    从以下验证代码可以看出:

    1 print(stu1.__dict__)
    2 print(stu2.__dict__)
    3 print(stu3.__dict__)
    4 
    5 结果为
    6 
    7 {'name': 'alex', 'age': 'male', 'sex': 38, 'count': 1}
    8 {'name': 'jinxin', 'age': 'female', 'sex': 78, 'count': 1}
    9 {'name': 'Egon', 'age': 'male', 'sex': 18, 'count': 1}

    所以说正确的代码实例如下:

     1 class Student:
     2     school = 'Luffycity'
     3     count = 0
     4 
     5     def __init__(self, name, age, sex):
     6         self.name = name
     7         self.age = age
     8         self.sex = sex
     9         # self.count += 1
    10         Student.count += 1
    11 
    12     def learn(self):
    13         print('%s is learning' % self.name)
    14 
    15 stu1 = Student('alex', 'male', 38)
    16 stu2 = Student('jinxin', 'female', 78)
    17 stu3 = Student('Egon', 'male', 18)
    18 
    19 print(Student.count)
    20 print(stu1.count)
    21 print(stu2.count)
    22 print(stu3.count)
    23 print(stu1.__dict__)
    24 print(stu2.__dict__)
    25 print(stu3.__dict__)
    26 
    27 结果为:
    28 
    29 3
    30 3
    31 3
    32 3
    33 {'name': 'alex', 'age': 'male', 'sex': 38}
    34 {'name': 'jinxin', 'age': 'female', 'sex': 78}
    35 {'name': 'Egon', 'age': 'male', 'sex': 18}
  • 相关阅读:
    2019.8.8 python day03
    2019.8.7 python进阶day02
    2019.8.6(python day01)
    2019.8.5
    2019.8.2
    2019.8.1
    2019.7.31
    2019.7.30
    面向对象进阶
    访问可见性问题和@property装饰器
  • 原文地址:https://www.cnblogs.com/xudachen/p/8581974.html
Copyright © 2011-2022 走看看