面向对象1
1、类的定义:
Python使用class关键字来定义类,其语法格式如下:
class:类名
类体
其中,类名的首字母一般需要大写,具体示例如下:
class Student:
def say(self,name): #实例方法
self.name = name #实例属性
print (‘我是’,self.name)
其中,实例方法与前面学习的函数格式类似,区别在于类的所有实例方法都必须至少有一个名为self的参数,并且必须是方法的第一个形参(如果有多个形参),self参数代表将来要创建的对象本身。另外,self.name称为实例属性,在类的实例方法中访问实例属性时需要以self为前缀。
2、对象的创建
·在Python中,有两种对象:类对象与实例对象。类对象只有一个,而实力对象可以有多个。
·类对象是在执行class语句时创建的,如例所示。
class Student:
def say(self,name): #实例方法
self.name = name #实例属性
print (‘我是’,self。name)
print (‘类对象生成’)
print (type(Student))
在例中,Python执行class语句时创建一个类对象和一个变量(名称就是类名称),变量引用类对象。通过type()函数可以测试对象的类型。
在定义类时,还可以定义类属性,如例所示。
class Student:
school = ‘扣丁学堂’ #类属性
def say(self,name): #实例方法
self.name = name #实例属性
print (‘我是’,self.name)
print (Student。school)
3、构造方法
Python中构造方法一般用来为实例属性设置初值或进行其他必要的初始化操作,在创建实例对象时被自动调用和执行,如例所示。
class Student:
def init(self): #构造方法
print(‘调用构造方法’)
self.school = ‘千锋教育’
def say(self):
print(‘学校:’,self.school)
sl = Student()
sl.say()
Python中构造方法一般用来为实例属性设置初值或进行其他必要的初始化操作,在创建实例对象时被自动调用和执行,如例所示。
class Student:
def init(self,myschool = ‘千锋教育’): #构造方法
self.school = myschool
def say(self):
print(‘学校:’,self.school)
sl = Student()
sl.say()
s2 = Student(‘扣丁学堂’)
s2.say
4、析构方法
析构方法一般用来释放对象占用的资源,在删除对象和收回对象空间时被自动调用和执行,如例所示。
class Student:
def init(self,myName):
self.name = myName
print(‘初始化’,self.name)
def del(self):
print(‘释放对象占用资源’,self.name)
s1 = Student(‘小千’)
s2 = Student(‘小峰’)
del s2
print (‘程序结束’)
在例中,第5行定义一个析构方法,该方法名称(del)是固定不变的,如果用户没有定义它,Python将提供一个默认的析构方法。第9行使用del语句删除一个对象,此时会自动调用析构方法。当程序结束时,Python解释器会自动检测当前是否存在未释放的对象,如果存在,则自动使用del语句释放其占用的内存,如本例中的s1对象。
5、类方法
类方法是类所拥有的方法,通过修饰器@classmethod在类中定义,其语法格式如下:
class 类名:
@classmethod
def 类方法名(cls)
方法体
其中,cls表示类本身,通过它可以访问类的相关属性,但不可以访问实例属性,如例所示。
class Student:
num = 0
def init(self,myName):
Student.num +=1
self.name = myName
@classmethod
def count(cls):
print(‘学生个数:’,cls.num)
Student.count()
s1 = Student(‘小千’)
s1.count()
s2 = Student(‘小峰’)
Student.count()
6、静态方法
类方法可以通过类名或实例对象名调用,静态方法也可以通过两者调用,其语法格式如下:
class 类名:
@ststicmethod
def静态方法():
函数体
其中,@staticmethod为装饰器,参数列表中可以没有参数。静态方法可以访问类属性,但不可以访问实例属性,如例所示。
class Student:
num = 0
sef init(self,myName):
Student.num +=1
self.name = myName
@staticmethod
def count():
print(‘学生个数:’,Student.num)
Student.count()
s1 = Student(‘小千’)
s1.count()
s2 = Student(‘小峰’)
Student.count()