创建类
一个类由构造器,属性,方法构成。
类有一个名为 __init__() 的特殊方法(构造方法),该方法在类实例化时会自动调用。
self代表类的实例,而非类。
#创建父类person
class person:
def __init__(self,n,a):
self.name = n
self.age = a
def func(self):
print(self.name,self.age)
创建对象
#通过person创建对象p1
p = person("Kitty",18)
p.func()
方法
公有方法
在类中和类外都都测调用的方法.
私有方法
不测被类的外部调用模块,在方法前加个"__"双下划线就是私有方法。
实例方法
由对象调用;至少一个self参数;执行实例方法时,自动将调用该方法的对象赋值给self;
类方法:由类调用; 至少一个cls参数;执行类方法时,自动将调用该方法的类赋值给cls;
1当方法中需要使用类对象(如访问私有类属性)时,定义类方法
2类方法一般和类属性配合使用
静态方法
由类调用;无默认参数;
当方法中既不需要使用实例对象(如实例属性,实例方法),也不需要使用类对象(如类属性、类方法、创建实例等时,定义静态方法
取消不需要的参数传递,有利于减少不必要的内存占用和性能消耗
class MainClass:
def shilifangfa(self):
print('这是一个实例方法')
@classmethod
def leifangfa(cls):
print('这是一个类方法')
@staticmethod
def jingtaifangfa():
print('这是一个静态方法')
继承
子类(派生类 DerivedClassName)会继承父类(基类 BaseClassName)的属性和方法。
单继承
#创建继承person的子类student
class student(person):
#添加新属性
grade = ""
className = ""
#添加新的构造方法
def __init__(self,n,a,g,c):
person.__init__(self,n,a) #调用父类的构造函数
#对新属性赋值
self.grade = g
self.className = c
#重写父类的方法
def func(self):
print(self.name,self.age,self.grade,self.className)
#使用student创建对象
s = student("Kitty",18,"2021级","教育技术学")
s.func()
多继承
Python同样有限的支持多继承形式
#创建父类person
class person:
def __init__(self,n,a):
self.name = n
self.age = a
def func(self):
print(self.name,self.age)
#创建子类student,继承父类person
class student(person):
#添加新属性
grade = ""
className = ""
#添加新的构造方法
def __init__(self,n,a,g,c):
person.__init__(self,n,a) #调用父类的构造函数
#对新属性赋值
self.grade = g
self.className = c
#重写父类的方法
def func(self):
print(self.name,self.age,self.grade,self.className)
#创建类information
class information():
idNum = 0
def __init__(self,i):
self.idNum = i
#创建子类samlep,继承父类student和information
class sample(student,information):
def __init__(self,n,a,g,c,i):
student.__init__(self,n,a,g,c) #调用父类student的构造函数
information.__init__(self,i) #调用父类informaton的构造函数
#重写父类的方法
def func(self):
print(self.name,self.age,self.grade,self.className,self.idNum)
#使用子类sample创建test对象
test = sample("Kitty",18,"2021级","教育技术学",2021010123)
test.func()
super函数
当存在继承关系的时候,有时候需要在子类中调用父类的方法,这时候就需要使用父类的名称进行调用,若父类名称修改,则子类会涉及多处修改,为了避免这种麻烦,Python引入了super()函数。
#创建父类person
class person:
def __init__(self,n,a):
self.name = n
self.age = a
def func(self):
print(self.name,self.age)
#创建子类student
class student(person):
#添加新属性
grade = ""
className = ""
#添加新的构造方法
def __init__(self,n,a,g,c):
super().__init__(n,a) #等价于person.__init__(self,n,a)
#对新属性赋值
self.grade = g
self.className = c
#重写父类的方法
def func(self):
print(self.name,self.age,self.grade,self.className)
#创建对象
s = student("Kitty",18,"2021级","教育技术学")
s.func()