面向对象编程基础

面向对象思想有三大要素:

1.封装
2.继承
3.多态

类和对象

所谓的类便是对象的蓝图,对象是类的实例。类就像将某些事物的相同属性和行为提取出来使用关键字class定义。

定义类

Python使用关键字来定义类,将函数定义在类中就成为类中的方法,例子如下:

class Student(object):

    def __init__(self, name, age):  # 数据初始化
        self._name = name
        self._age = age

    # 在定义属性的时候我们可以个它增加属性的访问器和修改器例如:
    @property   # 属性访问器
    def age(self):
        return self._age

    @age.setter  # 属性修改器
    def age(self, age):
        self._age = age if 15 < age < 25 else 20

    def watch_av(self):
        if self._age >= 18:
            print('看片')
        else:
            print('看动漫')

定义一个类之后我们就可以使用类中的方法

def main():
    stu1 = Student('ljl', 18)  # 创建学生对象
    stu1.study('Python程序设计')  # 给对象发study消息
    stu1.watch_av()  # 给对象发watch_av消息
    stu2 = Student('王大锤', 16)
    stu2.study('英语')
    stu2.watch_av()


if __name__ == '__main__':
    main()

访问可见性

Python之中没有访问的限制,无论你怎么定义,只要别人知道你所定义的格式那么他就可以使用你所想要保护的属性。例如:

class L:

    def __init__(self, f):
        self.__f = f

    def __b(self):
        print(self.__f)
        print('__b')


def main():
    l = L('hello')
    l._L__b()
    print(l._L__f)


if __name__ == "__main__":
    main()

练习

1.计时器

import time


class Rectangle:

    def __init__(self, width, height):
        self._width = width
        self._height = height

    def perimeter(self):
        return (self._width + self._height) * 2

    def area(self):
        return self._height * self._width


class Clock(object):
    def __init__(self, hour=0, minute=0, second=0):
        # 不要参数 使用系统时间  python中的time模块
        # 倒计时钟 指定一个时间 时间为0则提醒用户
        # 猜数字
        # 奥特曼打小怪兽
        # 定义一个类描述平面上的一个点 可以移动到某一个点 移动了多少  一个点到另外一个点距离
        self._hour = hour
        self._minute = minute
        self._second = second

    def run(self):
        self._second += 1
        if self._second == 60:
            self._minute += 1
            self._second = 0
            if self._minute == 60:
                self._minute =0
                self._hour += 1
                if self._hour == 24:
                    self._hour =0

    def show(self):
        return '%02d:%02d:%02d' % (self._hour, self._minute, self._second)

    # 下面的方法可以获得对象的字符串表示形式
    # 当我们用print打印对象时候会自动调用该方法
    def __str__(self):
        return '%02d:%02d:%02d' % (self._hour, self._minute, self._second)

    def display(self):
        while True:
            if self._second < 59:
                self._second += 1
            else:
                self._second = 0
                if self._minute < 59:
                    self._minute += 1
                else:
                    self._minute = 0
                    if self._hour < 23:
                        self._hour += 1
                    else:
                        self._hour = 0
            time.sleep(1)
            return str(self._hour) + ':' + str(self._minute) + ':' + str(self._second)


def main():
    s1 = Rectangle(10, 5)
    print(s1.area())
    print(s1.perimeter())
    # d1 = Clock(22, 59, 55)
    # while True:
    #     print(d1.display())
    clock = Clock()
    while True:
        print(clock.show())
        clock.run()
        time.sleep(1)


if __name__ == '__main__':
    main()

2.倒计时

# 倒计时钟 指定一个时间 时间为0则提醒用户
import time

class Count_down(object):
    def __init__(self, hour, minute, second):
        self._hour = hour
        self._minute = minute
        self._second = second

    def remind(self):
        if self._hour == 0 and self._minute == 0 and self._second == 0:
            return False
        elif self._second == 0:
            if self._minute == 0:
                self._hour -= 1
                self._minute = 59
                self._second = 60
            else:
                self._minute -= 1
                self._second = 60
        self._second -= 1
        return True

    def show(self):
        return '%02d:%02d:%02d' % (self._hour, self._minute, self._second)


def main():
    c = Count_down(0, 0, 5)
    while c.remind():
        print(c.show())
        time.sleep(1)
    print('时间到,请离开考试的位置')


if __name__ == '__main__':
    main()

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、面向对象概述 1.1 对象 在现实世界中,对象是事物存在的实体。而在计算机的世界中,面向对象程序设计的思想要以...
    文哥的学习日记阅读 3,564评论 0 3
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,498评论 25 709
  • 天呐夏天到底有什么好……热死了,不想学习,羡慕别人……好懒,我有点羡慕将来我的孩子……
    魏小喵wu阅读 1,441评论 0 0
  • 一次又一次的原谅 换来的不过是讽刺的语言 他也哭着求过你不要离开 可是每次又是他逼着你说离开 他是这样绝情 你也不...
    小晓歌阅读 1,630评论 1 5
  • 文/小太阳下的乌龟 “ 他们两个真不配“ “ 他怎么会看上她的?眼瞎了吧” “ 以她的条件,完全可以找个更好的呀,...
    小太阳下的乌龟阅读 9,718评论 67 101

友情链接更多精彩内容