当前位置: 首页 > news >正文

教育 企业 重庆网站建设沈阳电商网站建设

教育 企业 重庆网站建设,沈阳电商网站建设,南宁网站建设公司比优建站,wordpress 底部按钮多态性、封装、绑定方法与非绑定方法 文章目录 多态性、封装、绑定方法与非绑定方法一、多态性二、封装三、绑定方法与非绑定方法 一、多态性 多态指的是同一种事物的多种形态#xff0c;如水#xff1a;冰、水蒸气、液态水#xff0c;又如动物#xff1a;猫、狗、猪。 多…多态性、封装、绑定方法与非绑定方法 文章目录 多态性、封装、绑定方法与非绑定方法一、多态性二、封装三、绑定方法与非绑定方法 一、多态性 多态指的是同一种事物的多种形态如水冰、水蒸气、液态水又如动物猫、狗、猪。 多态性是指不考虑对象类型的情况下直接使用对象的方法这就要求设计者把对象的方法统一为一种例如 #猫狗猪都是可以叫那就可以使用一个接口来调用叫这个功能 class Aminal():passclass Cat(Aminal):def talk(self):print(喵喵喵)class Dog(Aminal):def talk(self):print(汪汪汪)class Pig(Aminal):def talk(self):print(哼哼哼)#接口函数 def talk(aminal):aminal.talk()cCat() dDog() pPig() talk(c) talk(d) talk(p) 喵喵喵 汪汪汪 哼哼哼python本身也是支持多态性的len函数就是对多种容器类型封装的接口函数所以使用len函数时只需要将容器的实例传入就可以得到容器的长度值。 由上面的例子我们可以知道多态性的本质就是在不同的类型中定义相同的方法这样就可以不考虑具体的类型直接调用统一的方法了。 python中还可以使用抽象类来实现多态性。 import abc# Animal是抽象类用来指定子类的标准不能被实例化 class Animal(metaclassabc.ABCMeta):abc.abstractmethod #这个装饰器用来约束子类必须定义speak方法def speak(self):pass class People(Animal):#继承抽象类的子类不定义speak方法时会报错def speak(self):print(say hello)class Dog(Animal):def speak(self):print(汪汪汪)pPeople() dDog() p.speak() d.speak() say hello 汪汪汪python中还存在一种名为鸭子类型的规范也就是叫的声音像鸭子并且你走路的样子也像鸭子那你就是鸭子。 class Disk:def read(self):print(disk read)def write(self):print(disk wirte)class Process:def read(self):print(process read)def write(self):print(process wirte)class File:def read(self):print(file read)def write(self):print(file wirte)上述代码定义了三个类型鸭子、管道、文件虽然这三者之间没有任何的联系但是他们都有read和write方法所以可以将他们都视为文件类型来使用。通过这种约定式的方式实现多态可以减少程序的耦合度。 二、封装 封指属性对外是隐藏的但对内是开放的。装指申请一个名称空间往里装入一系列名字/属性。所以封装指使用类存放一系列属性方法并且这些属性方法只对类内部开放。 封装属性的目的 隐藏之后是为了不让外部使用直接使用需要类内部开辟一个接口然后让类外部的使用通过接口来间接地操作隐藏的属性。精髓在于我们可以在接口之上附加任意逻辑从而严格控制使用者对属性的操作。 封装方法的目的隐藏方法是为了不让外不直接使用需要类内部开辟一个接口然后在接口内去调用隐藏的功能。精髓在于隔离了复杂度。 python中隐藏属性和方法的方式是在变量前面加上__。但是 这种隐藏仅仅只是一种语法上的变形操作(变量在类定义阶段被修改为_类名__属性/方法)这种语法上的变形只在类定义阶段发生一次因为类体代码仅仅只在类定义阶段检测一次这种隐藏是对外不对内的即在类的内部可以直接访问而在类的外则无法直接访问原因是在类定义阶段类体内代码统一发生了一次变形如果不想让子类的方法覆盖父类的可以将该方法名前加一个__开头 class A():__a1def __b(self):#类内部可以直接访问隐藏属性print(self.__a)aA() print(A.__dict__) #在类外部可以通过_类名__属性/方法的方式访问 a._A__b() #类外部加入的__属性不会再次改名 a.__c2 print(a.__dict__){...,_A__a: 1, _A__b: function A.__b at 0x0000018C8E8E9160,...} 1{__c: 2}将属性隐藏起来的目的是通过设置相应的接口来限制用户对隐藏属性的修改。 #控制名字的输入 class TellName():def __init__(self,name):self.__tell_name(name)self.__namenamedef __tell_name(self,name):if not isinstance(name,str): #判断name是否为str类型的对象raise TypeError(姓名必须为字符串) #抛出TypeError(姓名必须为字符串)的报错信息def check_name(self):print(self.__name)tTellName(111)TypeError: 姓名必须为字符串tTellName(李四) t.check_name() 李四将方法隐藏起来的目的是为了减少复杂度。 class Atm():def __card(self):passdef __auth(self):passdef __input(self):passdef __take_money(self):passdef withdraw(self):self.__card()self.__auth()self.__input()self.__take_money()aAtm() a.withdraw()上述代码只需要在类外调用withdraw方法就可以完成整个取款流程了大大降低了操作的复杂度。 python中property装饰器用于将被装饰的方法伪装成一个数据属性在使用时可以不用加括号而直接引用。 class People:def __init__(self,name):self.__namenameproperty #伪装成obj.namedef name(self):#返回值就是伪装的obj.name的值return 名字是%s %self.__namename.setter #伪装name的修改方式obj.name值def name(self,name):if type(name) is not str:raise TypeError(名字必须是str类型)self.__namenamename.deleter #伪装name的删除方式del obj.namedef name(self):del self.__namepeo1People(111) print(peo1.name) peo1.name222 print(peo1.name) del peo1.name print(peo1.name) 名字是111名字是222AttributeError: People object has no attribute _People__name三、绑定方法与非绑定方法 绑定方法绑定给谁就应该由谁来调用谁来调用就会将谁当作第一个参数自动传入 绑定方法分为两类: 绑定给对象方法在类内部定义的函数没有被任何装饰器修饰的默认就是绑定给对象用的绑定给类的方法在类内部定义的函数如果被装饰器classmethod装饰那么则是绑定给类的应该由类来调用类来调用就自动将类当作第一个参数自动传入。 非绑定方法类中定义的函数如果被装饰器staticmethod装饰那么该函数就变成非绑定方法既不与类绑定又不与对象绑定意味着类与对象都可以来调用但是无论谁来调用都没有任何自动传值的效果就是一个普通函数。 class Mysql:def __init__(self, ip):self.ipip#绑定给对象的方法第一个值为self默认是给对象调用的def tell_info(self):print(%s%self.ip)#绑定给类的方法第一个值为cls默认是给类调用的classmethoddef from_conf(cls):#cls就是Mysqlcls(127.0.0.1)这是一种在类内部完成实例化的方式return cls(127.0.0.1)#不绑定的方法对象和类都可以调用staticmethoddef func():print(不与任何人绑定)mMysql(172.30.156.0) m.tell_info() #绑定给对象的方法一般都是通过类调用的 #若是通过对象调用m.from_conf().tell_info()会将对象对应的类传给cls Mysql.from_conf().tell_info() m.func() Mysql.func()172.30.156.0 127.0.0.1 不与任何人绑定 不与任何人绑定
http://www.dnsts.com.cn/news/167738.html

相关文章:

  • 小白如何做网站建设公众号北京装修公司前20名
  • 自己做的网站发布到网上视频播放不了百度推广获客方法
  • 可信赖的大良网站建设在线作图网
  • 公司自己怎么创建免费网站体育网站建设视频
  • 网站开发的原理深圳seo教程
  • 沈阳网站设计制作wordpress未验证邮箱用户
  • 南昌建设公司网站网店设计说明
  • 网站开发工程师介绍做搜狗pc网站软件
  • 学网站开发需要学那些淘宝客建立网站
  • 织梦网站导航浮动网站模版
  • 一个网站的建设需要什么长沙品质网站建设优点
  • 房地产最新消息爆雷网站关键词优化推广哪家快
  • 网站建设结构图钟表商城网站建设方案
  • 网站后台内容更换怎么做网站建设佰金手指科杰二七
  • 做t恤的网站网站建设开发ppt模板下载
  • 被老板抓到用公司产品做自己的网站广东和深圳的关系
  • 云南网站建设费用内销机械做哪个网站好
  • 网站设置会员企业品牌文化建设学习网站
  • 中国建设银行官网站网点苏州建设网站首页
  • 建立个人网站代码做网站要固定ip
  • 怎么网站建设到百度酒水代理加盟免费铺货
  • c++语言网站建设wordpress优化宝塔
  • 公司做完网站怎么搜不到邢台seo价格
  • 学院网站建设方案 网站内容wordpress前端编辑器
  • 租车网站建设方案前端和后端有啥区别
  • 台州网站设计公司网站广州最近流感很厉害吗
  • php wordpress配置连云港seo优化
  • 网站建设表单教案网站开发的经济可行性分析
  • 耿马网站建设设计网站需要什么条件
  • 网站都需要什么类别企业建设网站公司有哪些