python3.6面向对象的多继承与装饰器

# 多继承

class A:

def show(self):

print(‘AAAA‘)

class B:

def fun(self):

print(‘BBBB‘)

class C(B,A):

pass

x = C()

# 类的特殊方法

‘‘‘

类属性:

__dict__ : 类的属性(包含一个字典,由类的数据属性组成)

__doc__ :类的文档字符串

__name__: 类名

‘‘‘

x = ‘a\nb‘

#print(repr(x))

#实例调用:

‘‘‘

__init__    初始化

__repr__    c1

__str__     print (c1 )(如果类里面先定义了__repr__的话print x时也会返回对应的

__call__    c1()   使实例可被调用

‘‘‘

class Rectangle:

def __init__(self,width,height):

self.width = width

self.height = height

def __str__(self):

return ‘宽为%s,高为%s‘%(self.width,self.height)

def __repr__(self):

return ‘面积为%s‘%self.area()

def __call__(self):

return ‘哈哈哈 ‘

def area(self):

return self.width*self.height

def __add__(self,other):

if isinstance(other,Rectangle):

return self.area()+other.area()

c1 = Rectangle(3,4)

c2 = Rectangle(5,6)

# 运算符魔法方法:

‘‘‘

__add__(self,other)     x+y

__sub__(self,other)     x-y

__mul__(self,other)     x*y

__mod__(self,other)    x%y

__iadd__(self,other)    x+=y

__isub__(self,other)    x-=y

__radd__(self,other)    y+x

__rsub__(self,other)     y-x

__imul__(self,other)    x*=y

__imod__(self,other)    x%=y

‘‘‘

# 装饰器

‘‘‘

@property 装饰过的函数返回的不再是一个函数,而是一个property对象

装饰过后的方法不再是可调用的对象,可以看做数据属性直接访问。

@staticmethod 把没有参数的函数装饰过后变成可被实例调用的函数,

函数定义时是没有参数的。

@classmethod 把装饰过的方法变成一个classmethod类对象,既能能被类调用又能被实例调用。

注意参数是cls代表这个类本身。而是用实例的方法只能被实例调用。

‘‘‘

class Rectangle:

def __init__(self,width,height):

self.width = width

self.height = height

@property

def area(self):

return self.width*self.height

@staticmethod

def fun():

return ‘xxxxxx‘

@classmethod

def show(cls):

print(cls)

return ‘YYYY‘

c1 = Rectangle(3,4)

def fun1(ff):

def fun2(y):

return ff(y)+100

return fun2

@fun1    #ff = fun1(ff)     # x=ff

def ff(y):

return y*y

def filterarg(x):

def fit(*arg):

if len(arg) == 0:

return 0

for i in arg:

if not isinstance(i,int):

return 0

return x(*arg)

return fit

#@filterarg

def sums(*arg):

return sum(arg)

filterarg(sums)(3,4,5)

@filterarg

def average(*arg):

print(arg)

return sum(arg)/len(arg)

时间: 2024-12-15 11:56:48

python3.6面向对象的多继承与装饰器的相关文章

面向对象之封装 及@property装饰器使用

目录 封装 1.封装的定义 2.封装的目的: 3.封装的三种方式 4.封装的优点 5.访问限制(封装) @property 装饰器 封装 1.封装的定义 ? 将复杂的丑陋的,隐私的细节隐藏到内部,对外提供简单的使用接口, 对外隐藏内部实现细节,并提供访问的接口; 2.封装的目的: 封装的目的: 面向对象的核心是对象二字,精髓在于整合,封装的目的其实就是把一堆数据属性和方法属性整合到对象中,我们可以把对象比喻成一个容器,其实就是为了把数据存入一个容器中.存的目的就是为了取的,那封装到对象中的好处就

【Python面向对象】(6) 装饰器(decorator)

1. 用于拓展原来函数功能的一种函数 2. 返回函数的一种函数 3. 在不用更改原函数代码的前提下给函数添加新的的功能 (1)没有装饰器时的实现 """ 不用装饰器的情况 """ def hello(): print("hello...") def test(): print("test...") def hello_wrapper(): print("开始hello函数...") he

Python之路(十二):描述符,类装饰器,元类

python基础之面向对象(描述符.类装饰器及元类) 描述符 描述符(__get__,__set__,__delete__)   # 这里着重描述了python的底层实现原理 1. 描述符是什么:描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()中的一个,这也被称为描述符协议. __get__():调用一个属性时,触发 __set__():为一个属性赋值时,触发 __delete__():采用del删除属性时,触发 1 class

理解Python装饰器(一)

python装饰器 装饰器是什么?我也不知道该如何给装饰器下定义. 1. 装饰器是函数,因为从代码的层面上来说,它就是开发人员定义的一个函数而已: 2. 装饰器就像是类的继承一样,通过装饰符,来实现函数与函数.函数与类之间的"继承" 3. 装饰器是种特殊的语法,通过 `@函数名` 或者 `@类名` 来实现函数或类的继承,但是 装饰器不是继承,装饰器装饰的函数会被当做参数传递给装饰器,这个功能又好像 C++中的虚函数,装饰器装饰的函数用来修改装饰器本身的功能来实现额外功能的添加. 示例:

设计模式(三)_装饰器模式

上篇学习了策略模式,现在回想下,什么是策略模式,好了.本篇主要介绍装饰器模式,just do it! 什么是装饰器模式 装饰器模式指的是动态的将责任附加到对象上.若要扩展功能,装饰器模式提供了比继承更弹性的替代方案. 如何使用装饰器模式 老王来到商场买衣服,需要买衣服,裤子,帽子...... public class Wang { public void show(){ System.out.println("我穿上衣服,累计花费100元"); System.out.println(&

面向对象编程思想 以及 封装,继承,多态 和 python中实例方法,类方法,静态方法 以及 装饰器

一.什么是面向对象编程? 目前主流的两大软件开发方式有两种,面向过程 和 面向对象. 具体什么意思,看别人写好的博客:https://baijiahao.baidu.com/s?id=1626333751993181194&wfr=spider&for=pc(如何给女朋友解释什么是面向对象编程) 二.动态编程语言中的核心 -- 封装,继承和多态 核心定义:把一组数据结构和处理他们的方法成为 对象,把具有相同行为的对象称为 类.通过 封装 隐藏内部细节,通过 继承 实现类的特化和泛化,通拓

【Python3之面向对象的程序设计】

一.面向对象的程序设计的由来 1.第一阶段:面向机器,1940年以前 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数据. 简单来说,就是直接编写 0 和 1 的序列来代表程序语言.例如:使用 0000 代表 加载(LOAD),0001 代表 存储(STORE)等. 优点:机器语言由机器直接执行,速度快: 缺点:写比较困难,修改也麻烦,这样直接导致程序编写效率十分低下,编写程序花费的时间往往是实际运行时间的几十倍或几百倍. 由于机器语言实在是太难编写了,

面向对象之多继承

多继承 Python不同版本的类     Python2.2之前类是没有共同的祖先的,之后引入object类,它称为新式类.     Python2中为了兼容,分为旧式类(古典类)和新式类     Python3中全部都是新式类     新式类都是继承自object的,新式类可以使用super. 多继承     OCP原则: 多继承.少修改     继承的用途: 增强基类.实现多态     多态     在面向对象中,父类.子类通过继承联系在一起,如果通过同一个方法,实现了不同的表     现,

s14 第4天 关于python3.0编码 函数式编程 装饰器 列表生成式 生成器 内置方法

python3 编码默认为unicode,unicode和utf-8都是默认支持中文的. 如果要python3的编码改为utf-8,则或者在一开始就声明全局使用utf-8 #_*_coding:utf-8_*_ 或者将字符串单独声明: a = "中文".encode("utf-8") 函数式编程 函数式编程中的函数指代的是数学中的函数. 函数式编程输入如果确定,则输出一定是确定的.函数中并没有很多逻辑运算 python是一个面向对象的语言,只是一部分支持函数式编程.