【Python笔记】多继承时,两个父类之间为何可以相互调用method?

#!/usr/bin/env python
# -*- coding:utf-8 -*-

class B(object):
	def func_b(self):
		print("In class B, func_b")
		# print('B: ', B.__mro__)
		print('B: ', self)
		self.func_d()  # 调用同为父类的D中的func_d函数


class C(object):
	def func_c(self):
		self.func_b()
		print('C: ', self)
		# print('C: ', C.__mro__)
		print("In class C, func_c")


class D(object):
	def func_d(self):
		print('D: ', self)
		# print('D: ', D.__mro__)
		print("In class D, func_d")


class A(B, C, D):  # A同时继承B,C,D
	def __init__(self, parent=None):
		super(A, self).__init__()
		print('A: ', self)
		# print('A: ', A.__mro__)

	def func_d(self):
		print("In class A, func_d")


if __name__ == '__main__':
	A_inst = A()
	print('A_inst: ', A_inst)
	A_inst.func_b()
	A_inst.func_c()
	A_inst.func_d()

上面B,C,D都是A的父类,互为平行关系,而C类中的func_c竟然可以调用B类中的func_b???程序运行结果如下,可以看到类实例A_instA, B,C,类中的self是一个内存地址,这也就解释了为何C类中的func_c竟然可以调用B类中的func_b。


A:  <__main__.A object at 0x000002D60CE2E070>
A_inst:  <__main__.A object at 0x000002D60CE2E070>
In class B, func_b
B:  <__main__.A object at 0x000002D60CE2E070>
In class A, func_d
In class B, func_b
B:  <__main__.A object at 0x000002D60CE2E070>
In class A, func_d
C:  <__main__.A object at 0x000002D60CE2E070>
In class C, func_c
In class A, func_d

知识点: 有self时,该方法是绑定到对象的方法。

class Person(object):
    def func01(self):
        print('绑定到对象的方法')
    
    @classmethod
    def func02(cls):
        print('绑定到类的方法')
    
    @staticmethod
    def func03():
        print('非绑定方法')

参考:
Python 类方法实例方法内存地址相同???

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值