当前位置: 首页 > 知识库问答 >
问题:

python 父子属性访问?

鄢英哲
2023-04-29
from loguru import logger


class State:
    def __init__(self):
        self.logger = logger

    def __setattr__(self, name, value):
        self.logger.info(f'wwwwasdasd')# 问题代码
        self.__dict__[name] = value


class LocalState(State):
    def __init__(self):
        super().__init__()
        self.ll = 2


if __name__ == '__main__':
    state = LocalState()
    state.ll = 22222
    print(state.ll)

怎么可以让这个 self.logger 属于子类(不是直接添加到子类属性这种方式),并且可以运行

共有2个答案

伯英锐
2023-04-29
import abc

from loguru import logger


class State:
    def __init__(self):
        pass

    @property
    @abc.abstractmethod
    def get_logger(self):
        raise "子类实现该方法"

    def __setattr__(self, name, value):
        self.get_logger.info(f"wwwwasdasd")  # 问题代码
        self.__dict__[name] = value


class LocalState(State):
    def __init__(self):
        super().__init__()
        self.ll = 2

    @property
    def get_logger(self):
        # 可以返回任意一个logger,父类调用该方法取决于子类的实现
        return logger


if __name__ == "__main__":
    state = LocalState()
    state.ll = 22222
    print(state.ll)
澹台正业
2023-04-29
from loguru import logger


class State:
    def __setattr__(self, name, value):
        if hasattr(self, 'logger'):
            self.logger.info(f'wwwwasdasd')
        super().__setattr__(name, value)  # 使用 super() 委托给父类


class LocalState(State):
    def __init__(self):
        super().__init__()
        self.logger = logger
        self.ll = 2


if __name__ == '__main__':
    state = LocalState()
    state.ll = 22222
    print(state.ll)
from loguru import logger


class State:
    def __setattr__(self, name, value):
        if hasattr(self, 'logger'):
            self.logger.info(f'wwwwasdasd')
        super().__setattr__(name, value)  # 使用 super() 委托给父类


class LocalState(State):
    def __init__(self):
        super().__init__()
        self.logger = logger
        self.ll = 2


if __name__ == '__main__':
    state = LocalState()
    state.ll = 22222
    print(state.ll)
 类似资料:
  • 问题内容: 这不是一件很难的事,但我无法弄清楚如何做到最好。 我有一个父指令,像这样: 和一个子指令: 如何从子指令轻松访问父指令的和属性?在我的链接函数中,我可以访问父级作用域-我应该用来观察这些属性吗? 放在一起,我想拥有的是: 这个想法是默认情况下显示一组字段。如果单击,它们将成为输入并可进行编辑。 问题答案: 从这篇SO帖子中汲取灵感,我在这个笨拙的人中有一个可行的解决方案。 我不得不改变

  • 当我创建一个带有父对象引用的子对象时,比如

  • 本文向大家介绍C# Winform 子窗体访问父级窗体的控件和属性,包括了C# Winform 子窗体访问父级窗体的控件和属性的使用技巧和注意事项,需要的朋友参考一下 今天在做一个联系人管理的C#设计时,遇到了这个问题,我需要将父窗体中的textBox中的值传到子窗体并进行数据库查询操作,我用了new 父窗体().textBox.text;来进行值传递,然而并无卵用,经过多次试验,找到了一个比较简

  • 问题内容: 得知子类的类变量无法访问父类的类变量而没有特别指出父类的名称,我感到很惊讶: 为什么在定义By时我必须引用Ax,而不仅仅是x?这与我对实例变量的直觉是相反的,并且因为在定义B之后我可以引用Bx。 问题答案: 在Python中,在创建类之前,将在其自己的名称空间中执行类的主体(此后,该名称空间的成员将成为该类的成员)。因此,当解释器达到y = x + 1时,此时B类尚不存在,因此没有父类

  • 问题内容: 假设我有一个带有某些属性的类。如何最好地(在Pythonic- OOP中)访问这些属性?就像吗?还是写get访问器?这些东西可接受的命名方式是什么? 编辑: 您能否详细说明使用单引号或双引号下划线命名属性的最佳做法?我在大多数模块中看到使用单个下划线。 如果已经问过这个问题(虽然搜索没有带来结果,但我有一个直觉,请指出)-我将结束这个问题。 问题答案: 通常公认的做事方式只是使用简单的

  • 我有一个像这样的xml结构 我需要选择ClassX节点,并在包含constname1(即variable1)AttAttribute的值中 这起作用了。但是,我需要做如下操作,而不是在循环中混合文本 这是我不对的 然而下面是正确的 但我希望将选择范围限制为classX的节点