首页 > 编程语言 >python 封装、抽象、多态和继承的实现

python 封装、抽象、多态和继承的实现

时间:2022-09-06 00:33:32浏览次数:55  
标签:__ 封装 name python self 多态 print class def

封装的实现

# 封装
class people:
    def __init__(self,name,money):
        self.name = name
        self.__money = money # 私有属性,只能类的内部使用--》数据封装
    # def __say(self):
    #     #     print('我是私有方法')
    #方法的封装:通过公有的方法来访问私有的属性
    def getMoney(self):
        return self.__money
    def setMoney(self,money):
        self.__money = self.__money +money
    # def run_setMoney(self):
    #     self.__setMoney()
zs = people('张三',100)
#在类的外部私有属性、方法可以通过  对象._类名__私有属性、方法  的方式进行访问
print(zs._people__money)
# print(zs._people__say())
print(zs.getMoney())
zs .setMoney(200)
print(zs.getMoney())

继承的实现

#继承:一个类获取另外一个类的属性和方法的过程
# 子类获取父类的属性或者方法
#人类:属性name age sex 方法:say() sleep()
#学生:属性name age sex studentid ...  方法:say() sleep() study() ...
class people:  # 父类
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex
    def say(self):
        print('我是一个正直的人')
    def sleep(self):
        print('我是人类,需要休息8个小时')
    def __driver(self): #父类的私有方法不能被继承。
        print('我是老司机有驾驶技能')

class student(people):  #子类  继承people
    # studentid = None
    #父类有构造方法的话,子类必须实现构造方法
    def __init__(self,name,age,sex,studentid):
        #方法1:调用父类的构造方法,必须要传self
        # people.__init__(self,name,age,sex)
        #方法2 使用super,不需要传self
        # super().__init__(name,age,sex)
        #方法3 使用super,此时第一个参数要写子类的名称
        super(student, self).__init__(name,age,sex)
        self.studentid = studentid

    def study(self):
        print('我是学生,需要学习')
    def sleep(self):
        print('我是学生,只能休息7个小时')
yt = student('chouchou',22,'女',777)
# yt.name = 'chouchou'
print(yt.name,yt.age,yt.sex)
yt.say()
# yt.sleep()#子类重写父类方法时,默认调用子类的方法
yt.study()
# yt._people__driver()  #调用父类私有方法
# 子类重写方法后调用父类的方法。
# people.sleep(yt)
super(student,yt).sleep()

多继承的实现

#多继承: 一个子类中含有多个父类
# 人类--教师--司机
class people: # 父类
    def __init__(self,name):
        self.name = name
    def say(self):
        print('我是人类')
    def sleep(self):
        print('我需要睡觉')
class teacher: # 父类
    def __init__(self,Course_name):
        self.Course_name = Course_name
    def say(self):
        print('我是一个阳光型老师,我会教书')
    def play(self):
        print('我教体育,主要是篮球')
# 子类:老师晚上兼职跑滴滴
class driver(teacher,people):  # 两个父类
    def __init__(self,name,Course_name,driverYeas):
        people.__init__(self,name)
        teacher.__init__(self,Course_name)
        self.driverYeas = driverYeas
    # def say(self):   #多继承中假如父类中有同名的方法,那么就按照父类的先后顺序进行调用
    #     print('我是一名老师,兼职跑滴滴')

# 实现
zhuzhu = driver('猪猪','体育',5)
print(zhuzhu.driverYeas)
zhuzhu.say()
print(zhuzhu.name,zhuzhu.Course_name,zhuzhu.driverYeas)

抽象类和抽象案例的实现

from abc import ABCMeta, abstractmethod


# 抽象类
# 1.抽象类中要有抽象方法
# 2.要有抽象类的定义语句
# 3.抽象类是用来被继承的。如果没有被继承那么毫无意义。
class animal(metaclass=ABCMeta):  # 定义抽象类 ,此方法子类强制性必须实现父类的抽象方法
    # __metaclass__ = ABCMeta # 定义抽象类,此方法子类必须实现父类的抽象方法
    def __init__(self, name, sex):
        self.name = name
        self.sex = sex

    # 抽象方法
    @abstractmethod
    def say(self):  # 只定义,不实现具体内容,子类必须实现父类的抽象方法  强制使子类实现父类方法
        pass  # 不会实现任何语句块


class dog(animal):  # 父类是抽象类 1、实现父类的抽象方法  2、子类本身也是抽象类
    def __init__(self, name, sex):
        super().__init__(name, sex)

    def say(self, color):
        print(f"{self.name}我是子类必须实现父类的方法{color}")


xiaohuang = dog('小黄', 2)
print(xiaohuang.name)
xiaohuang.say('hello world')

from abc import ABCMeta, abstractmethod


# 学生--去教室学习
# 老师--去教室上课
# people:name age   方法:goto_class
class people(metaclass=ABCMeta):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @abstractmethod
    def goto_class(self):
        pass


class student(people):
    def __init__(self, name, age, studentid):
        people.__init__(self, name, age)
        self.studentid = studentid

    # 防止开发忘记写goto_class方法
    def goto_class(self):
        print(f'我是学生,学号是{self.studentid}')


class teacher(people):
    def __init__(self, name, age, courseName):
        people.__init__(self, name, age)
        self.courseName = courseName

    def goto_class(self):
        print(f'我是老师,去上{self.courseName}课')


lisi = student('李四', 18, 2)
zhangshan = teacher('张老师', 35, 'python')
print(lisi.name)
lisi.goto_class()
zhangshan.goto_class()

多态的实现

from abc import ABCMeta,abstractmethod
# 多态:一类事物具有多种形态,多态的前提试试必须要实现继承
# 多态性 :多态性是指具有不同功能的函数可以使用相同的函数名
# txt 文件 --双击  打开查看内容
# exe程序 --双击 打开程序
# MP4视频 --双击 播放视频
class File(metaclass=ABCMeta):
    @abstractmethod
    def duoble_click(self):
        pass
# 多态
class txtFile(File):
    def duoble_click(self):
        print('打开txt文件,查看内容')

class exeFile(File):
    def duoble_click(self):
        print('打开exe程序,运行程序')

class mp4File(File):
    def duoble_click(self):
        print('打开mp4,播放视频')
# 多态性
def d_click(file_obj):
    file_obj.duoble_click()

txt = txtFile()
exe = exeFile()
mp4 = mp4File()

# 调用实现多态性
d_click(txt)
d_click(exe)
d_click(mp4)

标签:__,封装,name,python,self,多态,print,class,def
From: https://www.cnblogs.com/ygod323/p/16660227.html

相关文章

  • python学习Day60
    Day60今日内容概要表查询数据准备及测试环境搭建ORM常见表查询关键字双下划线查询查看ORM底层SQL遇见ORM外键字段创建外键字段数据增删改查正反向概念基于对象......
  • 使用python画3D立体爱心
    原理1.使用python中的mtplotlib库。2.立体爱心面公式\[(x^2+\frac{9}{4}y^2+z^2-1)^3-\frac{9}{80}y^2*z^3-x^2*z^3=0\]点画法(实心)代码importmatplotlib.pyplotas......
  • 从零开始学python必看,“Python编程三剑客”,你值得拥有
    从0开始学Python,就问你一句:慌不慌?   第一本:《Python编程:从入门到实践》   第二本:《Python编程快速上手-让繁琐工作自动化》   第三本:《《Python极客......
  • python学习(元组、字典、set集合)
    (一)、列表 1、列表的嵌套 需求:输出数字9 解决:利用索引层级输出   2、列表的切片   (二)、元组:tuple1、列表与元组的区别?列表是可变的,元组是不可变的......
  • python(二)元组、字典、集合
    11.列表的嵌套##列表的嵌套、字符类型#list4=[1,'go','你好',1008.21,True['json','java','c++','go',[1,2,3,7]]]#print(list4[])##列表的切片,获取列表中指定范围的......
  • Python入门系列(十)一篇学会python文件处理
    文件处理在Python中处理文件的关键函数是open()函数。有四种不同的方法(模式)来打开一个文件"r"-读取-默认值。打开一个文件进行读取,如果文件不存在则出错。"a"-Ap......
  • pythonⅡ
    list1=[1,'xc',True,100.00,['sd','hi','jk',[1,0,2,3]]]print(list1[4][3][2])   '''列表的切片'''list1=[1,3,4,5,6,7,8,9,11,16,19]#开始与结束,包含开始,不含结......
  • Python读取PDF文档中的表格数据
    #-*-coding:utf-8-*-#在pdfplumber模块中提供了extract_tables()方法importpdfplumberimportpandasaspd#提取PDF文档中的表格defdemo1():withpd......
  • 用Python做一个中秋抢购月饼的脚本
    序言每逢佳节倍思亲,想买个东西给家里,结果发现手速不够,网速不够快,没有时间下单等等各种原因导致最后想买的东西售罄了…甚至跟你一起抢购的可能是脚本,太真实了!......
  • ubuntu16 安装 python-networkmanager 失败
    前言ubuntu16安装python-networkmanager失败解决方案sudoapt-getinstalllibdbus-1-devsudoapt-getinstalllibdbus-glib-1-devsudopip3installdbus-python......