一、类的定义
① 约定成俗的类的命名方式:
1)首字母大写
2)为了与其他进行区分尽量避免使用 ‘_’,建议采用StudentHomework小驼峰的格式
②类的常规格式:
class Student():
# 定义变量(数据成员)
student_sum = 80 #类变量
# 构造函数
def __init__(self, name, age)
# 其中的self.name 和 self.age称为实例变量
self.name = name
self.age = age
self.__score = 0 # 这个时候score就是私有的,不能使用[对象.score]直接访问
# 实例方法访问实例变量( 注意这里不能直接写name)
print(self.name)
# 实例方法访问类变量
print(self.__class__.sum)
def mark(self,score):
self.__score = score
if score < 0:
retrun "不能输入负分"
print(self.name + "得到的分数为:" + str(self.__score))
# 定义实例方法:类中的方法强制传入固定参数 self(特征)
def write_homework(self)
print("write homework")
# 定义类方法
@classmethed
def puls_sum(cls):
cls.sum += 1
# 定义静态方法
@staticmethed
def add(x,y):
print(x+y)
二、类的使用(类的实例化)
student = Student()
以上为类的实例化,当然这里实例化的student还没有意义。详细的在后面构造函数处解释
调用类下的方法:student.write_homework()
三、类的几个重要知识
- 类的最基本作用:封装
- 类的最基本原则:类只负责定义和描述一个事物,但是不执行代码
四、类与模块的区别
函数 – 方法
变量 – 数据成员
五、类和对象
- 首先对类进行描述记住一句重要的话:数据成员刻画“学生”行为特征,方法实现行为
- 类可以看做一个模板,通过一个模板可以产生很多对象(在类实例化之后并给实例化出的变量赋值变为对象;这里需要怎么赋值呢?这就引出了构造函数的概念)
六、构造函数:
在最开例举的类的常规格式中有一个方法__init__(self)这是类中的一个特殊的方法,我们将它称为构造函数。
-
构造函数的特点
① 实例化时会自动调用构造函数(构造函数也可以被人为调用,但是人为调用没有任何意义,所以很少看到人为去调用构造函数)
② 构造函数不能返回除None之外的任何值 -
构造函数的作用
构造函数可以让类生成不同的对象,一般用来初始化对象的特征(回答二中的问题)
这个时候我们便可以真正的构建了一个对象了:student = Student(“小明”,18)
七、类变量和实例变量
- 类变量:和类相关联在一起
- 实例变量:和对象相关联在一起
二者具体存在什么区别呢?可以通过两个打印查看一下
print(student.name):查看对象的name为“小明”
print(Student.name):查看类的name为‘ ’
通过二者的对比可以明显的看出类变量和实例变量的区别
八、类方法和静态方法
- 使用修饰器修饰,如一种代码示例
- 类/静态方法是不能访问实例变量的
九、成员(数据成员和方法)可见性
在python中,私有成员的声明方法是在成员前添加“__”双下划线,此时该成员就不能通过[对象.成员来访问了];
注意:① 此时对于数据成员的使用时不会保存,但是本质上此时时动态增加了一个变量而不是改变了其值
② python中的私有成员实际上是python自己将成员名前面增加了【 _类名】,因此还是可以通过python改变后的值来改变的,这也是python的一个缺点;(可以通过【对象.__dict__ 】查看对象中存在的数据成员)
十、继承
### 父类
class Human():
# 定义变量(数据成员)
student_sum = 80 #类变量
# 构造函数
def __init__(self, name, age)
# 其中的self.name 和 self.age称为实例变量
self.name = name
self.age = age
### 子类
class Student(Human):
def __init__(self,school,name,age):
self.school = school
# 方法一:
#Human.__init__(self,name,age)
# 方法二:
super(Student, self).__init__(name, age)