面向对象编程_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 传入的是当前类的实例对象 ,故想要在当前类中调用其他类中方法的时,传入当前类的实例对象是否能满足可以被目标类的方法所处理

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM