多态:

同一种事物有多种状态

多态性:

在不考虑对象具体类型的前提下直接调用对象下的方法

静态多态性和动态多态性

静态多态性:都可以进行+操作

动态多态性:不考虑对象具体类型调用方法

多态的好处:

①增加了程序的灵活性

②增加了程序的可扩展性

多态的用法

为了规范子类的方法

定了抽象类,抽象类无需实现具体的方法,但继承了抽象类的子类必须实现抽象类的方法,否则报错

import abc

class Foo(metaclass = abc.ABCMeta):

def run(self):

pass

class Person(Foo):

@abc.abstractmethod

def run(self):

pass

property 将类中方法伪装成属性

class Foo:

@property

def AAA(self):

print('get的时候运行我啊')

@AAA.setter
def AAA(self,value):
print('set的时候运行我啊') @AAA.deleter
def AAA(self):
print('delete的时候运行我啊')

只有在属性AAA定义property后才能定义AAA.setter,AAA.deleter

f1=Foo()

f1.AAA

f1.AAA='aaa'

del f1.AAA

property的原理,是一个非数据描述符,修改了get函数,调用属性时返回的是该属性名对应的绑定方法(参数为实例名)

class Lazyproperty:

def init(self,func):

self.func=func

def get(self, instance, owner):

print('这是我们自己定制的静态属性,r1.area实际是要执行r1.area()')

if instance is None:

return self

return self.func(instance) #此时你应该明白,到底是谁在为你做自动传递self的事情

class Room:

def init(self,name,width,length):

self.name=name

self.width=width

self.length=length

@Lazyproperty #area=Lazyproperty(area) 相当于定义了一个类属性,即描述符
def area(self):
return self.width * self.length

r1=Room('alex',1,1)

print(r1.area)

最新文章

  1. 防御CSRF的方法有哪些(一) HTTP 头中自定义属性并验证 CSRF跨站域请求伪造攻击
  2. ZooKeeper基本原理
  3. 有关iOS系统中调用相机设备实现二维码扫描功能的注意点(3/3)
  4. JS 的事件委托机制
  5. Redis中统计各种数据大小的方法
  6. [转]Spring注解原理的详细剖析与实现
  7. Sping Environment为Null的原因和解决方法
  8. 解决AndroidADT自带Eclipse编辑器不能自动代码提示的问题
  9. Codeforces Round #379 (Div. 2) 总结分享
  10. ado.net的5个主要对象
  11. UML建模之状态图(Statechart Diagram)
  12. Android应用开发提高篇(6)-----FaceDetector(人脸检测)
  13. springMVC源码分析--AbstractUrlHandlerMapping(三)
  14. 关于get和post请求的区别
  15. 001_ajax学习
  16. pl/sql破解方法
  17. shell和shell脚本基本知识
  18. STM32CubeF4 FreeRTOS Examples don't work correctly with HAL_GetTick
  19. Java常用类(二)String类详解
  20. Ubuntu16 nginx安装http_image_filter_module模块

热门文章

  1. 爬虫之图片懒加载技术、selenium和PhantomJS
  2. [软件工程基础]2017.10.31 第四次 Scrum 会议
  3. 【bzoj3033】太鼓达人
  4. 洛谷 P1121 环状最大两段子段和
  5. MFC中的模态对话框与非模态对话框
  6. linux下输出json字符串,用python格式化
  7. django 模板语言的注释操作
  8. mac 终端查看端口命令
  9. aspectj xml
  10. Ajax 提交表单【包括文件上传】