‘’’
面向过程编程为:函数的调用集合
面向对象编程为:对象之间传递信息的集合
对象包含属性和方法
类(由属性和方法组成)可以理解为图纸或者模板
实例是根据类的图纸或者模板创建出来的一个一个对象
类定义为class,关键字self
类的初始化函数_init_
面对对象的三大特点:继承,封装,多态
‘’’
#面向过程
stu1={'name':'xiaohong','score':98}
stu2={'name':'xiaobai','score':81}
#函数
def print_score(stu):
print('%s:%s' % (stu['name'],stu['score']))
#面向对象
#1.设计类
#属性和方法
class Student(object):
pass
class Student(object): #类
#方法(内部的函数) self是指向创建的实例本身的
def __init__(self,name,score): #self为默认参数,可以当它没有,不管
self.name=name
self.score=score
def print_score(self):
print('%s:%s' % (self.name, self.score))
#实例化对象1
xiaohong=Student('xiaohong',98) #调用初始化方法_init_,将参数绑定到self关键字上
print(id(xiaohong)); #2140067248392
#实例化对象2
xiaobai=Student('xiaobai',81)
print(id(xiaobai)); #2140067248520(和小红相比,明显内存是不一样的)
#在class内部,对象本身就是self,在外部,就是我们定义的xiaohong这种名字
print(xiaobai.name,xiaobai.score) #xiaobai 81
print(xiaohong.name,xiaohong.score) #xiaohong 98
‘’’
继承,封装,多态
‘’’
#封装
class Student(object): #类
#方法(内部的函数) self是指向创建的实例本身的
def __init__(self,name,score): #self为默认参数,可以当它没有,不管
self.name=name
self.score=score
def print_score(self):
print('%s:%s' % (self.name, self.score))
def get_grade(self):
if self.score>=90:
return 'A'
elif self.score>=60:
return 'B'
else:
return 'C'
xiaolv=Student('xiaolv',45) #调用实例的方法
print(xiaolv.get_grade()) #C
‘’’
访问限制
‘’’
xiaolv.score=90
print(xiaolv.get_grade()) #A
#self.__name(__)表示私有
class Student(object): #类
#方法(内部的函数) self是指向创建的实例本身的
def __init__(self,name,score): #self为默认参数,可以当它没有,不管
self.__name=name
self.__score=score
def print_score(self):
print('%s:%s' % (self.__name, self.__score))
def get_grade(self):
if self.__score>=90:
return 'A'
elif self.__score>=60:
return 'B'
else:
return 'C'
# 如果还想修改,只能重新写一个方法
def set_score(self,score): #封装属性,来定义是否可以读写等操作
if 0<=score<=100: #数据清洗
self.__score=score
else:
raise ValueError('分数请大于0小雨等于一百!')
def get_score(self):
return self.__score
xiaolv=Student('xiaolv',45)
print(xiaolv.get_grade()) #C
xiaolv=Student("xiaolv",79)
print(xiaolv.get_grade())#通过属性访问,没有结果,因为私有了
#python中没有真正地私有属性和私有方法
print(xiaolv.get_score()) #79 私有过后,不能通过属性访问,只能通过方法来访问
#数据清洗
#print(xiaolv.set_score(101)) #会报错,因为数据限制了
print(xiaolv.set_score(10))
print(xiaolv.get_score()) #10
‘’’
类属性
‘’’
#实例属性 必须通过初始化或者实例化对象,通过对象去访问
class Student(object):
def __init__(self,name):
self.name=name
s=Student('bb')
print(s.name)
#类属性(和对象没有关系,不需要实例化对象,直接通过类名访问)—共有的
class Student(object):
name ='Student'
print(Student.name) #Student