面向对象

'''
面向对象语言的三大特征:封装、继承、多态
类:从现实社会中,提取一些事物的共同的属性(姓名、年龄、肤色、身高、体重.....)和行为(吃饭、睡觉、学习....)
    把上述的属性和行为,我们以便利和方法的形式定义在类里面
类的定义:
    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))

 

posted @ 2021-09-18 15:39  青春1990  阅读(152)  评论(0)    收藏  举报