Python:父 class 初始化程序可以知道子 class class 属性吗?

Python: Can a parent class initialiser know about child class class-attributes?

抱歉,如果整个 python 代码不好。我还在学习中。

我想做的是,我有几个 classes 共享很多方法。基本上,classes 仅在某些领域有所不同。当我创建这些 classes 之一的对象时,我希望用于创建的数据在断言中使用,以查看创建的对象是否具有预期的数据。每个 class 的预期数据不同,但每个 class 的所有对象都是相同的(即它是 class 属性)。

我看到以下代码在 IDE ("") 中被标记为错误:

class OperatingSystem:
    def __init__(self, my_param):
        my_os = my_param["os"]
        assert my_os == self.os_name


class Win11(OperatingSystem):
    os_name = "Windows 11"


class Win10(OperatingSystem):
    os_name = "Windows 10"

我认为 IDE 试图通过“未解析的属性引用 (os_name)”告诉我的是父 class __init__ 在class 变量已设置。因此,当我试图获取 class 变量(父级的初始化方法)时,该数据还不存在,这肯定会失败。

但是,从逻辑上讲,数据是已知的。所以,我应该有办法让它随时可用。当然,我可以只将常量放在父 class 或上面 - 但我想给 classes 它们自己的属性并做一些更多的 OO :)

你快到了。问题是基础 class OperatingSystem 没有设置 os_name,所以代码是这样的:

os = OperatingSystem({'os': 'Windows'})

尝试读取 self.os_name 时会失败。

解决此问题的两种方法:

  1. 告诉Python,OperatingSystem是一个抽象基class,这意味着它不能创建直接实例;只有它的子classes可以创建实例:

    from abc import ABC
    
    class OperatingSystem(ABC):
        ...
    
  2. 在基class中设置os_name:

    class OperatingSystem(ABC):
        os_name = "A Generic OS"
        ...