python之7-2类的继承与多态

  • 类的继承的意思就如同父子关系一样,这个儿子继承了父亲的一切,但是在某些地方(属性)相同的时候,儿子的属性大于老子的属性(覆盖),最底层类,总会继承最接近它的那个类的属性init

  • 类的多态总是和继承相连的,没有继承,就没有多态一说.一个子类的实例,它即属于这个子类,也属于父类,比如:父亲A和儿子B,儿子B即属于儿子类,也属于人类,但是它不属于父亲类

  • 多态是面向对象语言的一个基本特性,多态意味着变量并不知道引用的对象是什么,根据引用对象的不同表现不同的行为方式。在处理多态对象时,只需要关注它的接口即可

  • 多态的实际用法是构建一个类外函数 ,函数的参数为指向类对象的变量,然后函数体返回这个变量(类对象)的方法。这样子,调用函数就可以根据实例类型,来返回对应的方法。

  • 例如下面这个例子:

#!/usr/bin/env python

# coding=utf-8

#定义一个父类人类

class humen(object):

    def __init__(self,name,eye=2,age=None):

        self.name = name

        self.eye = eye

        self.age = age

    def action(self):

        print "%s%u个eye,这个人已经有%u岁了" %(self.name,self.eye,self.age)



class father(humen):

    def action(self):

        print "我是%s,是一名父亲" %self.name

class son(father):

    def action(self):

        print "我是%s,是一名的儿子" %self.name

one = humen("one",2,20)

tom = father('tom')

david = son('david')

def actiont(hm):

    return hm.action()

actiont(one)

actiont(tom)

actiont(david)


aaa103439@aaa103439-pc:~/桌面/python$ python test7_类_多态.py 

one有2个eye,这个人已经有20岁了

我是tom,是一名父亲

我是david,是一名的儿子

  • 如果想要实现在儿子实例中输出父亲实例的属性,则可以做如下修改:
#!/usr/bin/env python

# coding=utf-8

#定义一个父类人类

class humen(object):

    def __init__(self,name,eye=2,age=None):

        self.name = name

        self.eye = eye

        self.age = age

    def action(self):

        print "%s%u个eye,这个人已经有%u岁了" %(self.name,self.eye,self.age)



class father(humen):

    namef = []

    def __init__(self,name):

        self.name = name

        father.namef = name

    def action(self):

        print "我是%s,是一名父亲" %self.name

class son(humen):

    def action(self):

        print "我是%s,是%s的儿子" %(self.name,father.namef)

one = humen("one",2,20)

tom = father('tom')

david = son('david')

bob = father('bob')

micheal = son('micheal')

def actiont(hm):

    return hm.action()

actiont(one)

actiont(tom)

actiont(david)

actiont(bob)

actiont(micheal)


aaa103439@aaa103439-pc:~/桌面/python$ python test7_类_多态.py 

one有2个eye,这个人已经有20岁了

我是tom,是一名父亲

我是david,是bob的儿子

我是bob,是一名父亲

我是micheal,是bob的儿子

  • 注释:这里将son的父类替换为了human,目的就是在son类实例调用的父类的时候,避免了father类中列表namef的最后一个元素追加进son类实例的元素

转载于:https://www.cnblogs.com/aaa103439/p/3851315.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中的继承多态是面向对象编程的重要概念。 继承是指一个可以继承另一个的属性和方法。被继承称为父或基继承称为子派生。子可以继承的属性和方法,并且可以添加自己的属性和方法。通过继承,子可以重用父的代码,实现代码的复用和扩展。 在Python中,可以使用以下语法实现继承: ```python class ParentClass: pass class ChildClass(ParentClass): pass ``` 在上面的示例中,`ChildClass` 继承了 `ParentClass`,它可以访问和使用 `ParentClass` 中定义的属性和方法。 多态是指同一个方法名可以在不同的对象上产生不同的行为。在面向对象编程中,多态通过方法重写和方法重载来实现。 方法重写是指子定义一个与父同名的方法,从而覆盖父中的方法。当调用该方法时,会执行子中的方法而不是父中的方法。 ```python class ParentClass: def greet(self): print("Hello, I am the parent.") class ChildClass(ParentClass): def greet(self): print("Hello, I am the child.") parent = ParentClass() child = ChildClass() parent.greet() # 输出:Hello, I am the parent. child.greet() # 输出:Hello, I am the child. ``` 在上面的示例中,`ChildClass` 重写了 `ParentClass` 中的 `greet` 方法,所以在子对象上调用 `greet` 方法时会执行子中的方法。 方法重载是指一个中可以定义多个同名的方法,但这些方法的参数型或个数不同。根据不同的参数型或个数,会自动选择合适的方法进行调用。 ```python class Calculator: def add(self, a, b): return a + b def add(self, a, b, c): return a + b + c calculator = Calculator() print(calculator.add(1, 2)) # 输出:3 print(calculator.add(1, 2, 3)) # 输出:6 ``` 在上面的示例中,`Calculator` 中定义了两个同名的 `add` 方法,但参数个数不同。根据传入的参数个数,会自动选择合适的方法进行调用。 这就是Python继承多态的基本概念和用法。它们可以让我们更好地组织和重用代码,提高代码的可维护性和扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值