面向对象编程_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 传入的是当前类的实例对象 ,故想要在当前类中调用其他类中方法的时,传入当前类的实例对象是否能满足可以被目标类的方法所处理
分类:
python_基础
标签:
python _基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 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生成工具