面向对象编程_python不同类之间的方法调用

一、概要:在不同类中,想要实现调用对方类中的方法

 

不同类 之间的方法调用,且类之间存在继承关系:

复制代码
'''
继承关系中
子类和父类存在相同的方法是,子类的实例对象调用该方法,会优先 使用子类中的方法,
但是如果想要在子类中同时调用子类方法和父类方法时,可以通过在子类方法中 通过 父类类名.方法名(self) 的方式完成调用

'''

class base:

    def __init__(self,name):
        self.name =name

    def f1(self):
        print('这是base的f1',self.name)


class zilei(base):
    def f1(self):
        print('这是子类的f1')
        # 在子类中,通过父类.父类中的方法,将self传入  实现在子类中调用父类中和子类名字一样的方法
        base.f1(self)

z = zilei('哈哈')

z.f1()
复制代码

 

不同类 之间的方法调用,且类之间不存在继承关系:

复制代码
'''
非继承关系中
不同类之间要实现 调用对方的方法,
假设要调用的方法为非实例方法(即该方法没有操作对象变量相关数据):
则可以通过在当前类中 定义 目标类类名.目标类中的方法(self) 时间不同类之间的调用

假设要调用的方法为实例方法(方法内部操作了对象的相关数据),此场景下要想不同类之间的方法可以调用成功 需要满足以下两个条件
B类调用A类中的方法f2,A类中的方法对A类的实例变量进行了更改:
A类中的f2方法 存在更改的A类的实例变量,则在B类中必须存在与f2要更改的实例变量名 相同的B类的实例变量名,因为此时传入的使B类的实例

'''
class A:
    def __init__(self,name):
        self.name = name

    def f2(self):
        self.name = '张三'
        print('A类中的方法')

class B:
    def __init__(self,name):
        self.name = name

    def f1(self):
        print('B类中的方法')
        # 传入类型为B的实例对象,
        A.f2(self)

class C:
    # 限定了C类的实例变量范围
    __slots__ = ('name','age')

    def f3(self):
        print('C类中的方法f3')
        A.f2(self)

class D:
    __slots__ = ('age')
    def f4(self):
        print('D类中的方法f4')
        A.f2(self)


#B类调用A类方法可以成功
a = B('李四')
a.f1()     #通过A类中的方法 更改了 a的 name值
print(a.name)

# C类调用A类方法可以成功
c = C()
c.f3()   #通过A类中的方法 更改了 c的 name值
print(c.name )


#D类调用A类方法失败  因为调用A类方法f2时传入D类对象,但是D类对象并没有name这个实例变量(D类的实例变量限制称了age),故调用失败
d = D()
# d.f4()
复制代码

 

三、总结:

不同类之间,不管类之间是否存在继承关系,均可以在当前类的方法中  通过类名.方法名(self) 实现在类中调用对方的类中方法 

注意:参数self 传入的是当前类的实例对象 ,故想要在当前类中调用其他类中方法的时,传入当前类的实例对象是否能满足可以被目标类的方法所处理

 

posted @   昆虫白  阅读(4125)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示