#面向对象
#class 类名:
# 类体
#类名首字母大写
#类对象与实例对象
#类对象
class Student:
school='鹿晗最棒' #类属性
def say(self,name):#实例方法
self.name=name#实例属性
print('真的',self.name)
print(Student.school)
#实例对象
class Student:
school='鹿晗' #类属性
def say(self,name):#实例方法
self.name=name #实例属性
print('我是',self.name)
s1=Student() #创建实例对象
s1.say('鹿晗最棒')
print(s1.school,s1.name)
#我是鹿晗最棒 鹿晗鹿晗最棒
#类属性和实例属性相同时,通过实例对象访问实例属性,类对象访问类属性
class Student:
school='鹿晗' #类属性
def say(self,school):#实例方法
self.school=school #实例属性
print('我是',self.school)
s1=Student() #创建实例对象
s1.say('鹿晗最棒')
print(Student.school,s1.school)
#我是鹿晗最棒 鹿晗鹿晗最棒
#构造方法
def __init__(self):
print('调用构造方法')
self.school='千锋教育'
def say(self):
print('学校:',self.school)
#析构方法
def __del__(self):
print('释放对象占用资源',self.school)
del s1
#类方法,可以访问类的相关属性,不可以访问实例属性
'''
class 类名:
@classmethod
def 类方法名(cls)#cls表示类本身
方法体
'''
class Student:
num=0
def __init__(self,name):
Student.num+=1
self.name=name
@classmethod #类方法
def count(cls):
print('学生个数:',cls.num)
Student.count()
s1=Student('小千')
s1.count()
#学生个数:0 学生个数:1
#静态方法
'''
class 类名:
@staticmethod
def 静态方法名():
函数体
'''
#运算符重载
class My:
def __init__(self,r=0,i=0):
self.r=r
self.i=i
def __add__(self,other):
return my(self.r + other.r,self.i + other.i)
def __eq__(self,other):
return self.r==other.r and self.i == other.i
def __str__(self):
if self.i < 0:
return '('+str(self.r)+str(self.i)+'j)'
else:
return '('+str(self.r)+'+'+str(self.i)+'j)'
c1=My(6,-4)
c2=My(3,2)
(c1+c2).show()
print(c1==c2)
print(c1,str(c2))
#索引或切片重载
class Data:
def __init__(self,list):
self.data=list[:]
def __getitem__(self,item):
return self.data[item]
def __setitem__(self,key,value):#重载索引与切片复制
self.data[key]=value
def __contains__(self,item):
return item in self.data
data=Data([1,2,3,4])
for i in data :
print(i,end=' ')#1 2 3 4
data[1]='qinfeng'
data[2:]='kouding','chengxu'
print(data.data)#[1,'qianfeng','kouding','chengxu']
print(0 in data)#False
#封装
#类外访问私有属性
class Student:
def __init__(self,myName,myScore=0):
self.name=myName
self.setScore(myScore)
def setScore(self,myScore):
if 0<myScore<=100:
self.__score=myScore
else:
self.__score=0
print(self.name,'成绩有误')
def getScore(self):
return self.__score
def __str__(self):
return '姓名:'+str(self.name)+'\t成绩:'+str(self.__score)
s1=Student('小千',100)
print(s1)
s1._Student_score=90
print(s1)
#姓名:小千 成绩:100
#姓名:小千 成绩:90
#单一继承
'''
class 基类名(object):
类体
class 派生类名(基类名):
类体
'''
#派生类的构造方法名与基类的构造方法名相同
class Person(object):
def __init__(self,name):
class Student(Person):
def __init__(self,name):
#如果派生类的构造函数中需要添加参数,则可以在派生类的构造方法中调用基类的构造方法
def __init__(self,name,score):
super(Student,self).__init__(name)#或Person.__init__(self,name)
#私有属性不能被继承
class Sshsh(Student,Person)
def __init__(self,name,score,id,salary)
#同名属性,会显示最后调用的