组合||抽象类||多态||鸭子类型

组合

软件重用的重要方式除了继承之外还有另外一种方式,即:组合

组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合

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

class Renwen(People):
    def __init__(self,name,age,sex,weapon):
        super().__init__(name,age,sex)
        self.weapon = weapon
        self.attribute = [] #锐雯的属性列表
    def skill(self):
        print(‘%s is skill‘%self.name)

class Teacher(People):
    def __init__(self,name,age,sex,level):
        super().__init__(name,age,sex)
        self.level = level

    def teach(self):
        print("%s is teaching" %self.name)

class Attribute:
    def __init__(self,damage,spell,armor):
        self.danage = damage
        self.spell = spell
        self.armor =armor

    def tell_info(self):
        print("生命值:%s,法术:%s,护甲:%s"%(self.danage,self.spell,self.armor))

rewen = Renwen(‘锐雯‘,22,‘female‘,"砍刀")
teacher1 =Teacher(‘林书行‘,30,‘male‘,20)

a = Attribute(200,20,100)#创建属性对象

rewen.attribute.append(a) #添加属性值

#打印出属性值
for i in rewen.attribute:
    i.tell_info()

原文地址:https://www.cnblogs.com/Mryang123/p/8597973.html

时间: 2024-10-31 20:06:05

组合||抽象类||多态||鸭子类型的相关文章

16 Apr 18 封装的property 多态 鸭子类型 classmethod和staticmethod

16 Apr 18 一.      封装的property BMI指数(bmi是计算而来的,但很明显它听起来像是一个属性而非方法,如果我们将其做成一个属性,更便于理解) 成人的BMI数值: 过轻:低于18.5 正常:18.5-23.9 过重:24-27 肥胖:28-32 非常肥胖, 高于32 体质指数(BMI)=体重(kg)÷身高^2(m) 首先需要明确.bmi是算出来的,不是一个固定死的值,也就说我们必须编写一个功能,每次调用该功能都会立即计算一个值,但很明显人的bmi值听起来更像一个名词而非

023_接口类,抽象类,多态,鸭子类型,封装

1,接口类 1 class Wechat(): 2 def pay(self,money): 3 print('已经用微信支付了%s元'%money) 4 class Alipay(): 5 def pay(self,money): 6 print('已经用支付宝支付了%s元' % money) 7 wechat = Wechat() 8 ali = Alipay() 9 # wechat.pay(100) 10 # ali.pay(200) 11 #将上面两句用下面的替换, 12 def pa

封装之property,多态,鸭子类型,classmethod与staticmethod

一.封装之Property prooerty是一种特殊的属性,访问时他会执行一段功能(函数)然后返回 '''BMI指数(bmi是计算而来的,但很明显它听起来像是一个属性而非方法,如果我们将其做成一个属性,更便于理解) 成人的BMI数值:过轻:低于18.5正常:18.5-23.9过重:24-27肥胖:28-32非常肥胖, 高于32 体质指数(BMI)=体重(kg)÷身高^2(m) EX:70kg÷(1.75×1.75)=22.86 ''' class People: def __init__(se

python多态和鸭子类型

多态 多态是同一个行为对于不同的对象具有多个不同表现形式或形态的能力. 多态性是对象多种表现形式的体现. 比如 我们按下 F1 键这个动作: 如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档: 如果当前在 Word 下弹出的就是 Word 帮助: 在 Windows 下弹出的就是 Windows 帮助和支持. 同一个事件发生在不同的对象上会产生不同的结果. 文件有多种形态:文本文件,可执行文件 import abc # 抽象类 class File(metaclass=abc.AB

面向对象之组合、封装、多态性、鸭子类型

一.组合 1. 什么是组合 一个对象的属性是来自于另外一个类的对象,称之为组合 2. 为何用组合 组合也是用来解决类与类代码冗余的问题 3. 如何用组合 # class Foo: # aaa=1111 # def __init__(self,x,y): # self.x=x # self.y=y # # def func1(self): # print('Foo内的功能') # # # class Bar: # bbb=2222 # def __init__(self, m, n): # sel

python语言的鸭子类型和强类型语言的多态

前面讲接口类的时候举过一个有关支付方式的例子,支付方式可以有几种,微信支付,支付宝支付,苹果支付等,这几个不同的支付都统一于支付,像这样几个类都统一于 某一个类或者某一个方法,或者说一个类有不同的形态的情况就属于多态:虽然几种支付方式都归一于支付类,执行的方法一样,但是每一个支付方式都有自己的特性,实现的 形态也不一样,即为多态性. class Payment: # 必要的父类 def pay(self,money): pass class Wechatpay(Payment): # 子类继承父

python的鸭子类型与多态

鸭子类型 对于静态语言(例如Java)来说,如果需要传入Animal类型,则传入的对象必须是Animal类型或者它的子类,否则,将无法调用run()方法. 对于Python这样的动态语言来说,则不一定需要传入Animal类型.我们只需要保证传入的对象有一个run()方法就可以了: class Timer(object): def run(self): print('Start...') 这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可

【3.1】鸭子类型和多态

鸭子类型: 当看到一只鸟走起来像鸭子.游泳起来像鸭子.叫起来像鸭子.叫起来也像鸭子.那么这只鸟就可以被称为鸭子 1 #!/user/bin/env python 2 # -*- coding:utf-8 -*- 3 4 5 class Cat(object): 6 7 @staticmethod 8 def say(): 9 print('i am cat') 10 11 12 class Dog(object): 13 14 @staticmethod 15 def say(): 16 pri

Python之面向对象的组合、多态、菱形问题、子类中重用父类的两种方式

一.组合 ''' 1.什么是组合 组合就是一个类的对象具备某一个属性,该属性的值是指向另外一个类的对象 2.为何用组合 组合也是用来解决类与类直接代码冗余问题的 3.如何用组合 ''' # 继承减少代码冗余,但是将类与类进行了强耦合,python不崇尚,所以能不用继承就尽量不用继承 class OldboyPeople: school = 'oldboy' def __init__(self, name, age, sex): self.name = name self.age = age se