首页 > 其他分享 >面向对象三大特性:封装,继承

面向对象三大特性:封装,继承

时间:2023-03-19 23:34:14浏览次数:35  
标签:__ ... 封装 name self 面向对象 def print 三大

封装:

  为什么要隐藏属性:

----------------------------------------------------------------------------------------

目的的是为了隔离复杂度,例如ATM程序的取款功能,该功能有很多其他功能组成,

比如插卡、身份认证、输入金额、打印小票、取钱等,

而对使用者来说,只需要开发取款这个功能接口即可,其余功能我们都可以隐藏起来

----------------------------------------------------------------------------------------

>>> class ATM:
...     def __card(self): #插卡
...         print('插卡')
...     def __auth(self): #身份认证
...         print('用户认证')
...     def __input(self): #输入金额
...         print('输入取款金额')
...     def __print_bill(self): #打印小票
...         print('打印账单')
...     def __take_money(self): #取钱
...         print('取款')
...     def withdraw(self): #取款功能
...         self.__card()
...         self.__auth()
...         self.__input()
...         self.__print_bill()
...         self.__take_money()
...
>>> obj=ATM()
>>> obj.withdraw()

 

 property:

property是一个装饰器,是用来绑定给对象的方法伪造成一个数据属性(调用对象不用加括号调用)

案例一:

class People:
   def __init__(self,name,weight,height):
      self.name = name
      self.weight = weight
      self.height = height

   #定义函数的原因1:
   #1.从bmi公式上看,bmi听该是触发功能计算得到的
   #2.bmi是随着身高体质变化而动态变化的,不是一个固定的值,每次需要临时计算
   @property  #把功能转化为数据属性
   def bmi(self):
      return self.weight/(self.height**2)

obj1 = People('whx',70,170)
print(obj1.bmi)  #0.002422145328719723

案例二(老操作):

class People():
   def __init__(self,name):
      self.__name = name

   def get_name(self):
      return self.__name

   def set_name(self,val):
      if type(val) is not str:
         print('必须传入str类型')
         return
      self.__name = val

   def dle_name(self):
      print('不让删除')

   name = property(get_name,set_name,dle_name)

obj1 = People('whx')

print(obj1.name)  #get_name  查看
obj1.name = 'hello'  #set_name  修改
del obj1.name  #del_name  删除

案例三(常用操作***):

class People():
   def __init__(self,name):
      self.__name = name
   @property #就相当于进行了name = propert(name)操作
   def name(self):  #get_name
      return self.__name
   @name.setter
   def name(self,val):    #set_name
      if type(val) is not str:
         print('必须传入str类型')
         return
      self.__name = val
   @property.deleter
   def name(self):  #del_name
      print('不让删除')


obj1 = People('whx')

print(obj1.name)  #get_name  查看
obj1.name = 'hello'  #set_name  修改
del obj1.name  #del_name  删除

继承:

1.子类会遗传父类的属性

#继承是一种创建新类的方式,
#在Python中,新建的类可以继承一个或多个父类,
#新建的类可称为子类或派生类,父类又可称为基类或超类

2.如果多个类有共同的功能或者属性,

那么可以放在同一个父类中存放,可以解决类与类代码冗余的问题 

(类是解决对象之间代码冗余的问题)


3.如果没有继承任何类,那么会默认继承object类,所以python3所有类都是新式类


多继承还有可能有可能会引发菱形问题

继承的示范:

如果父类有score对象   那么子类想要添加新的参数的话 

OldboyPeople.score(self,name)

 

标签:__,...,封装,name,self,面向对象,def,print,三大
From: https://www.cnblogs.com/whxx/p/17234836.html

相关文章

  • CSS的三大特性
    CSS的三大特性CSS有三个非常重要的三个特性:层叠性、继承兴、优先性。1.层叠性相同选择器给设置相同样式,此时一个样式就会覆盖(层叠)另一个冲突的样式,层叠性主要解决样式......
  • Vue axios简易封装
    1.安装axiosnpminstallaxios-g 2.创建utils文件夹,新建文件request.js对axios进行封装3.设置请求超时通过axios.defaults.timeout设置默认的请求超时时间。例......
  • C++面向对象、初始化列表、static const
    面向对象OOP​ OOP的四大特征:抽象、封装、继承、多态​ 对象内存大小只和成员变量有关,不同对象的变量都有自己的空间,成员方法是所有对象共享的,一旦编译会添加this指针,......
  • 安装axios和二次封装
    [email protected] 二次封装:项目中新建api目录,及request.js//对于axios进行二次封测importaxiosfrom'axios';//1.利用axios读写的方法create,创......
  • 面向对象:添加删除和修改学生信息
    packagecom.itheima.test7;publicclassTest{publicstaticvoidmain(String[]args){//定义一个长度为三的数组Student[]arr=newStude......
  • 2023年春面向对象第一单元
    23年春面向对象第一单元分析与总结目录 前言 架构  解析方法  数据结构  类图分析 基于度量的程序结构分析 BUG分析 互测相关 总结前言OO第一单元......
  • Java三大版本。JDK、JRE、JVM
    JavaSE:标准版(桌面程序,控制台开发...)JavaME:嵌入式开发(手机,小家电...)JavaEE:E企业级开发(Web端,服务器开发...)JDK:javadevelopmentkitJava开发者工具JRE:javaruntimeen......
  • 谈谈Java面向对象设计的六大原则
    单一职责原则——SRP开闭原则——OCP里式替换原则——LSP依赖倒置原则——DIP接口隔离原则——ISP迪米特原则——LOD单一职责原则单一职责原则的定义是就一个类......
  • .net7 AesCng 加密解密封装,仅支持Windows平台
    ///<summary>///AesCng加密///仅支持Windows平台///</summary>///<paramname="value">明文(待加密)</param>......
  • 再谈编程范式(3):理解面向过程/面向对象/函数式编程的精髓
    面向过程(PO)面向过程是随着VB一起来到我的世界,那个时候会的非常有限,感觉能把程序写出来自己就非常棒了,VB是做那种可视化界面,在工具栏拖个框框放到面板上,然后就在各个事件上写......