# 继承情况下:类属性、实例属性的区别
# """ 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}")