python 类中类里底层类访问修改外层类的方法

本文探讨了Python中类中类结构的实现方法,详细解释了如何让底层类访问并修改外层类的属性,避免常见错误,实现复杂功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   由于某种原因需要用到类中类的结构(比如类中的某个功能要用到多进程继承类的实现),
   但是按照平常的写法会存在底层类无法访问修改外层类的self里的变量的情况
   (底层类继承外层类仅能实现获得值,不能修改外层类的值).
class Mother:  # 外层类
	def __init__(self):
		self.x = 0
		self.run()
	def run(self):
		s = self.Son()
		s.gai()
	class Son:  # 底层类
		def __init__(self):
			self.y = self.x  # 这里是想要获得外层类的self.x的值,但是这样写不行.
			# 写成self.self.x/Mother.self.x都不行
		def gai(self):
			print("底层类的变量值",self.y)
			print("外层类的变量值",self.x)
			self.x = 1  # 这里是想要更改外层类的self.x的值,但是这样写不行
			self.y = 1  
			print("底层类的变量值",self.y)
			print("外层类的变量值",self.x)
m = Mother()

运行后报错:AttributeError: ‘Son’ object has no attribute ‘x’/AttributeError: ‘Son’ object has no attribute ‘self’/AttributeError: type object ‘Mother’ has no attribute ‘self’
于是做出代码改为:

class Mother:  # 外层类
    def __init__(self):
        self.x = 0
        self.run()

    def run(self):
        s = self.Son(self)
        s.gai()
        self.p()  # 外层类的x值已修改
        
    def p(self):
        print(self.x)
        
    class Son:  # 底层类
        def __init__(self, m_self):
            self.y = m_self.x
            self.m_self = m_self

        def gai(self):
            print("底层类的变量值", self.y)
            print("外层类的变量值", self.m_self.x)
            self.y = 1  # 更改底层类的self.x的值
            self.m_self.x = 1  # 更改外层类的self.x的值
            print("底层类的变量值", self.y)
            print("外层类的变量值", self.m_self.x)
            
m = Mother()

运行结果为:
底层类的变量值 0
外层类的变量值 0
底层类的变量值 1
外层类的变量值 1
1
成功实现类中类的底层类对外层类的访问和修改.
原理其实是把外层类的self当做变量传进来,如果对self这个概念理解不深入就会出现最开始的错误.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值