面向对象编程基础

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

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()

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

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