类属性与实例属性的区别

# 继承情况下:类属性、实例属性的区别
#  """  Person3.count += 1   """
class Person3:
    # Person类的计数器
    count : int = 0
    def __init__(self):
        Person3.count += 1

class Student(Person3):
    # Student类也有自己的计数器
    count : int = 0
    def __init__(self):
        # 调用父类的__init__,这会增加Person.count
        super().__init__()

print(f"创建2个Person 实例如下:\n")
person_3 = Person3()
# 1
print(f"实例属性,person_3: {person_3.count}")
person_4 = Person3()
# 2
print(f"类属性,Person3: {Person3.count}")
#  0
print(f"类属性,Student: {Student.count}")
# 2
print(f"实例属性,person_3: {person_3.count}")
#
print(f"实例属性,person_4: {person_4.count}")
# 2
print("\n创建2个Student实例:")
s1 = Student()
s2 = Student()
print(f"类属性,Person3:{Person3.count}")      # 4 (增加了2个)
print(f"类属性,Student: {Student.count}")    # 0 (没有改变)
print(f"实例属性,Person3:{person_3.count}")     # 4
print(f"实例属性,Student: {person_4.count}")    # 4
# 0
print(f"实例属性,s1:{s1.count}")
# 0
print(f"实例属性,s2: {s2.count}")

# --------------------------------------------------------------
# """  self.count += 1  """
class Person3:
    # Person类的计数器
    count : int = 0
    def __init__(self):
        self.count += 1

class Student(Person3):
    # Student类也有自己的计数器
    count : int = 0
    def __init__(self):
        # 调用父类的__init__,这会增加Person.count
        super().__init__()

print(f"创建2个Person 实例如下:\n")
person_3 = Person3()
# 1`
print(f"实例属性,person_3: {person_3.count}")
person_4 = Person3()
# 0
print(f"类属性,Person3: {Person3.count}")
# 0
print(f"类属性,Student: {Student.count}")
# 1
print(f"实例属性,person_3: {person_3.count}")
# 1
print(f"实例属性,person_4: {person_4.count}")

print("\n创建2个Student实例:")
s1 = Student()
s2 = Student()
#  0
print(f"类属性,Person3:{Person3.count}")
#   0
print(f"类属性,Student: {Student.count}")
#  1
print(f"实例属性,Person3:{person_3.count}")
#  1
print(f"实例属性,Student: {person_4.count}")
#  1
print(f"实例属性,s1:{s1.count}")
#  1
print(f"实例属性,s2: {s2.count}")

# ----------------------------------------------------
"""  self.__class__.count += 1   """
class Person3:
    # Person类的计数器
    count : int = 0
    def __init__(self):
        self.__class__.count += 1

class Student(Person3):
    # Student类也有自己的计数器
    count : int = 0
    def __init__(self):
        # 调用父类的__init__,这会增加Person.count
        super().__init__()

print(f"创建2个Person 实例如下:\n")
person_3 = Person3()
#  1
print(f"实例属性,person_3: {person_3.count}")
person_4 = Person3()
#  2
print(f"类属性,Person3: {Person3.count}")
# 0
print(f"类属性,Student: {Student.count}")
# 2
print(f"实例属性,person_3: {person_3.count}")
# 2
print(f"实例属性,person_4: {person_4.count}")

print("\n创建2个Student实例:")
s1 = Student()
s2 = Student()
#  2
print(f"类属性,Person3:{Person3.count}")
# 2
print(f"类属性,Student: {Student.count}")
#  2
print(f"实例属性,Person3:{person_3.count}")
# 2
print(f"实例属性,Student: {person_4.count}")
#  2
print(f"实例属性,s1:{s1.count}")
# 2
print(f"实例属性,s2: {s2.count}")

# ---------------------------------------------------------------------------
# 添加Student自己的计数器
class Person2:
    count : int =0
    def __init__(self):
        Person2.count += 1

class Student2(Person2):
    count = int = 0
    def __init__(self):
        super().__init__()
        Student2.count += 1

print(f"创建2个Person 实例如下:\n")
person_2 = Person2()
# 1
print(f"实例属性,person_2: {person_2.count}")
person_2_1 = Person2()
# 2
print(f"类属性,Person2: {Person2.count}")
# 0
print(f"类属性,Student2: {Student2.count}")
# 2
print(f"实例属性,person_2: {person_2.count}")
# 2
print(f"实例属性,person_2_1: {person_2_1.count}")

print("\n创建2个Student实例:")
s1 = Student2()
s2 = Student2()
#  4
print(f"类属性,Person2:{Person2.count}")
#  2
print(f"类属性,Student2: {Student2.count}")
#  4
print(f"实例属性,Person2:{person_2.count}")
#  4
print(f"实例属性,Student: {person_2_1.count}")
# 2
print(f"实例属性,s1:{s1.count}")
#  2
print(f"实例属性,s2: {s2.count}")

  

posted @ 2025-12-27 18:21  此心安处2022  阅读(5)  评论(0)    收藏  举报