python从零开始--24类属性 VS实例属性

xiaoxiao2021-02-28  42

类属性的定义方法:在类里面但不在类的方法里定义;不带self。

类属性的访问方法:A)用类访问的格式 “类名.类属性”; 

                              B) 用实例对象访问 "实例对象名.类属性"

实例属性的定义方法有两种: A) 一种是在类方法中定义,带self,尽量在__init__中定义和初始化; 

                                            B) 一种是实例对象生成后,在实例对象名称后“ .XXX”来给该对象添加一个实例属性。 注意添加的实例属性千万不要与其类属性同名,实例属性会覆盖类属性, 让程序的可读性和可维护性变的很差。

实例属性的访问方法: A)  在方法定义中,用 "self.实例属性"

                                     B)  在类定义外部,用 "实例对象名.实例属性"

类属性的定义和访问方法示例:

class Student(): student_count = 0 # 类属性的定义和初始化  def __init__(self, input_name): self.name = input_name # 这个name,前面带self,是实例属性,self就是指实例对象,实例对象最好在__init__中声明并初始化 Student.student_count += 1 # 这里用“类名.类属性”调用类属性,实现每生成一个Student对象,student_count自增1 def print_info(self): stu_info = "光谷实验中学学生:" + self.name # 这个stu_info是方法print_info的局部变量,不是类属性 print(stu_info) s1 = Student("李浩") s2 = Student('张淼') s3 = Student('珊琳') s3.print_info() print("用实例对象访问student_count,已创建的Student实例对象数为 {}".format(s3.student_count)) print("用类访问student_count 已创建的Student实例对象数为:{}".format(Student.student_count)) 光谷实验中学学生:珊琳 已创建的Student实例对象数为:3 实例属性的定义和访问方法示例:

class Student(): student_count = 0 # 这个student_count是类属性,前面不带self def __init__(self, input_name): self.name = input_name # 这个name,前面带self,这用来定义一个实例属性,self就是指实例对象,实例对象最好在__init__中声明并初始化 Student.student_count += 1 # 这里用“类名.类属性”调用类属性,实现每生成一个Student对象,student_count自增1 def print_info(self): # 这个stu_info是方法print_info的局部变量,不是类属性 stu_info = "光谷实验中学学生:" + self.name # 在类定义内部访问 实例属性,用self.实例属性名 print(stu_info) s1 = Student("李浩") s2 = Student('张淼') s3 = Student('珊琳') s3.print_info() s3.score = 90 # 在类定义外部定义一个实例属性score print(s3.name) # 在类定义外部,如果实例属性是公有的,可以通过"实例对象名.实例属性名"访问 print(s3.score) 光谷实验中学学生:珊琳 珊琳 90

为什么类属性和实例属性同名会导致程序可读性和可维护性变差?请看下面的例子:

class Student(object): name = "Student calss name" # 给Student类定义了一个类属性 name s1 = Student() s2 = Student() print(s1.name) print(s2.name) print(Student.name) print("*" * 100) s2.name = "s2 object name" # 给实例对象s2 定义了一个name的实例属性 print(s1.name) print(s2.name)  # s2的实例属性覆盖了类属性,所以返回的是不是类属性的值 print(Student.name) Student calss name Student calss name Student calss name **************************************************************************************************** Student calss name s2 object name Student calss name

转载请注明原文地址: https://www.6miu.com/read-2612818.html

最新回复(0)