'''
面向对象语言的三大特征:封装、继承、多态
类:从现实社会中,提取一些事物的共同的属性(姓名、年龄、肤色、身高、体重.....)和行为(吃饭、睡觉、学习....)
把上述的属性和行为,我们以便利和方法的形式定义在类里面
类的定义:
class 类名():
name='allen'
age=12
def eat():
pass
def study():
pass
类对象的创建:
从抽象到具体的过程
xiaowang=类名()
方法:定义在类中的方法,其实指的是类的行为
类变量:类变量是对所有的对象共有的,定义在类中方法外,类似上述的name、age
实例变量:每个对象独有的,定义在方法的内部,使用self.xx定义,self指的对象本身的引用,在当前函数中可用
局部变量:定义在方法中(方法的声明),在当前代码块有效
注意:1、类是具体对象的抽象,对象是类的实例化
'''
class person():
name = "xingming"
age = 0
def eat(self):
print(self.name)
self.gender = 'nan'
print("人类是要吃饭的")
def study(self):
print(self.gender)
print("人类都是要学测试的")
xiaowang = person()
xiaowang.name = 'xiaowangwang'
xiaowang.age = 20
print(xiaowang.name, xiaowang.age) #<__main__.person object at 0x010563D0>
xiaowang.eat() #self.name指的就是xiaowang的name
xiaolv = person()
xiaolv.eat()
xiaolv.study()
'''
面向对象的三大特性:
封装:
只希望自己能查看的数据,我们把变量或者方法定义为私有的,但是定义的类中需要提供对外公共访问方法(接口),只要我们对这个接口局部访问权限的话,我就能拿到数据,这种做法就叫封装
私有的变量:
在变量前面加上__两个下划线,那么这个变量就是私有的了,类的是变量私有化,eg:self.__name
私有的方法:
在方法名前加上__两个下划线,那么这个方法就是私有的了,格式:def __ss():
只能在类的内部进行调用,不能在外部进行调用
封装:对于私有的属性,不能被外界使用,但不可避免的要被访问和修改,我们就提供一些方法进行修改和对外访问接口,这种方式就叫做封装
继承
多态
'''
class animal():
__gangmu = '动物' #该类变量就私有了
# 第二种格式
def __init__(self, Name, age, leg):
self.name = Name
self.age = age
self.leg = leg
def print_info(self):
print('该动物的信息为:%s %s %s' % (self.name, self.age, self.leg))
self.__aa()
def getGangmu(self): #对外提供的访问接口,获取私有化数据
return self.__gangmu
def __aa(self):
print('我是私有方法。')
cat = animal("小黄", 3, 4)
# print(cat.__gangmu) #AttributeError: 'animal' object has no attribute '__gangmu'
cat.print_info()
print(cat.name)
print(cat.getGangmu())
'''
编写python程序,模拟简单的计算器:
定义名为Number的类,其中有两个整形数据成员n1和n2,应声明为私有
编写__init__方法,外部接收n1和n2
为该类定义加(addition)、减(subtration)、乘(multiplication)、除(division)等成员方法
分别对两个成员变量执行加、减、乘、除的运算,创建Number类的对象
调用各个方法,并显示计算结果
更换getN和setN方式事项对私有属性的访问和修改
'''
# 面向对象怎么用:创建类,创建对象,通过对象调用方法
class Number():
def __init__(self, n1, n2):
self.__n1 = n1
self.__n2 = n2
#利用封装的思想,提供给类一个get方法,定义getN方法实现对私有属性的访问
def getN(self):
return self.__n1, self.__n2
#利用封装的思想,提供给类一个set方法,定义setN方法实现对私有属性的修改
def setN(self, N1, N2):
self.__n1 = N1
self.__n2 = N2
# 定义加法方法
def addition(self):
return self.__n1 + self.__n2
# 定义减法方法
def subtration(self):
return self.__n1 - self.__n2
# 定义乘法方法
def multiplication(self):
return self.__n1 * self.__n2
# 定义除法方法
def division(self):
return self.__n1 / self.__n2
# 创建计算器
calc = Number(10, 5)
print(calc.addition())
print(calc.subtration())
print(calc.multiplication())
print(calc.division())
# print(calc.__n1) AttributeError: 'Number' object has no attribute '__n1'(AttributeError: 'Number'对象没有属性'__n1')
print(calc.getN())
calc.setN(8, 4)
print(calc.addition())
print(calc.subtration())
print(calc.multiplication())
print(calc.division())
'''
定义一个表示学生信息的类Student,要求如下:
1)类Student的成员变量:sNo表示学号,sName表示姓名,sSex表示性别,sAge表示年龄,sJava表示Java课程成绩
2)类Student的方法成员:getNo():获取学号;getName():获取姓名;getSex():获取性别;getAge():获得年龄;getJava():获得Java课程成绩
3)根据类Student的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值,以及计算并输出他们Java语言成绩的最大值和最小值。
'''
class Student():
# 成员:getNo():获取学号;getName():获取姓名;getSex():获取性别;getAge():获得年龄;getJava():获得Java课程成绩
def __init__(self, sNo, sName, sSex, sAge, sJava):
self.__sNo = sNo
self.__sName = sName
self.__sSex = sSex
self.__sAge = sAge
self.__sJava = sJava
# getNo():获取学号
def getNo(self):
return self.__sNo
# getName():获取姓名
def getName(self):
return self.__sName
# getSex():获取性别
def getSex(self):
return self.__sSex
# getAge():获得年龄
def getAge(self):
return self.__sAge
# getJava():获得Java课程成绩
def getJava(self):
return self.__sJava
# 输出学生信息
def printInfo(self):
print("%s信息为:学号%s,姓名%s,性别%s是,年龄%d,Java成绩%d。" %
(self.__sName, self.__sNo, self.__sName, self.__sSex,
self.__sAge, self.__sJava))
xm = Student("1001", "小明", "boy", 18, 90)
xh = Student("1002", "小花", "girl", 17, 99)
xl = Student("1003", "小亮", "boy", 19, 88)
xt = Student("1004", "小兔", "girl", 18, 80)
xmf = Student("1005", "小蜜蜂", "boy", 16, 90)
xm.printInfo()
xh.printInfo()
xl.printInfo()
xt.printInfo()
xmf.printInfo()
sJavalist = [
xm.getJava(),
xh.getJava(),
xl.getJava(),
xt.getJava(),
xt.getJava(),
xmf.getJava()
]
sScore = 0
for i in sJavalist:
sScore += i
sJavaAve = sScore / len(sJavalist)
print(sJavaAve)
print("Java语言成绩最大值是:%d" % max(sJavalist))
print("Java语言成绩最小值是:%d" % min(sJavalist))