Python的面向对象

Python的面向对象

面向对象的三大特性继承、封装、多态。

● 继承:子类可以继承父类的方法(类比儿子继承父亲的财产)

● 封装:只用调取相关的方法,没必要明白具体的实现过程(类比Pyhton中各种内置方法的使用)或者对于公共数据封装在内部,不在外部被修改

● 多态:主要是在继承之后对父类方法的重载。使得同一个方法名表现出不同的形态,也即实现不同的功能

1、面向对象的基础案例
from time import sleep

class Clock:
    def __init__(self, hour=0, minute=0, second=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.hour += 1
                self.minute = 0
                if self.hour == 24:
                    self.hour = 0
    
    def show(self):
        '''显示时间'''
        print("%02d时%02d分%02d秒" % (self.hour, self.minute, self.second))


def main():
    clock = Clock(23, 47, 59)
    while True:
        print(clock.show())
        sleep(3)
        clock.run()

if __name__ == "__main__":
    main()

2、面向对象中受保护的变量和可被修改的变量

1⃣️property修饰之后该方法就具有属性的特点,可以使用属性的调用方式,即在调用时不需要和方法一样,加上括号。

2⃣️变量.setter 和 变量.getter 分别代表对属性的读写操作。setter可对该属性修改;getter可对该属性读取

示例1:
class Pearson:
  '''抽象基类'''
    def __init__(self, name, age):
        self._name = name
        self._age = age

    @property
    def name(self):  # 受保护的变量
        return self._name

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, age):  # 将方法变为属性,可以用调用属性的方法调用
        self._age = age

    def play(self):
        print("%s正在玩LOl" % self._name)

    def watch(self):
        if self.age < 18:
            print("抱歉!%s,您只有%s岁,只能观看。。。" % (self._name, self._age))
        else:
            print("您好!%s,您已经%s岁了,可以观看的范围更广!" % (self._name, self._age))


class Student(Pearson):
    def __init__(self, name, age, grader):
        super(Student, self).__init__(name, age)
        self._grader = grader

    @property
    def grader(self):
        return self._grader

    @grader.setter
    def grader(self, grader):
        self._grader = grader

    def study(self, course):
        print("%s正在学习%s" % (self._name, course))


class Teacher(Pearson):
    def __init__(self, name, age, teach_age):
        super(Teacher, self).__init__(name, age)
        self._teach_age = teach_age

    @property
    def teach_age(self):
        return self._teach_age

    @teach_age.setter
    def teach_age(self, teach_age):
        self.teach_age = teach_age

    def cal_teachage(self):
        '''计算教龄'''
        print("%s已经有%s年的教龄!" % (self._name, self._teach_age))


def main():
    stu = Student("Ann", 23, "Woman")
    stu.study("Chinese")
    stu.watch()
    tea = Teacher("DongDong", 47, 12)
    tea.cal_teachage()

if __name__ == "__main__":
    main()
示例2
class showPage:
    def __init__(self, current_page):
        self.current_age = current_page     # 当前页码
        self.per_iterm = 10                 # 每页显示10条数据

    @property
    def start(self):
        '''下次读取数据的起始位置'''
        page_start = (self.current_age - 1) * self.per_iterm
        return page_start

    @property
    def end(self):
        '''读取数据的结束位置'''
        page_end = self.current_age * self.per_iterm
        return page_end


page = showPage(12)
print(page.start)       # 加了property可直接调用,不需要像调用方法一样加上括号
print(page.end)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值