Pyreverse 没有检测到 parent class 是复合的……为什么?

Pyreverse doesn't detect that the parent class is a Composite... why?

假设我有以下目录结构:

Folder PATH listing
Volume serial number is 986C-80E1
C:.
    test.py
    __init__.py
    
No subfolders exist 

__init__.py 为空白。在test.py。我有以下代码:

class Employee:
    def __init__(self, identifier, name, address):
        self.address = None

class Manager(Employee):
    pass

class Secretary(Employee):
    pass

class Address:
    def __init__(self, street_num, street_name):
        self.street_num = street_num
        self.street_name = street_name

这里的想法是实现简单的 one-to-many 组合。也就是说,所有 Employee 子类型还包含一个 Address 实例。

然后我 运行 pyreverse -S -o uml.png . 生成一个 UML class 图并得到以下内容:

pyreverse 无法识别 EmployeeAddress 之间存在 composite-component 关系。但是,如果我将 test.py 重构为以下内容:

class Employee:
    def __init__(self, identifier, name):
        self.address = None

class Manager(Employee):
    pass

class Secretary(Employee):
    pass

class Address:
    def __init__(self, street_num, street_name):
        self.street_num = street_num
        self.street_name = street_name

bob = Manager(1, "Bob")
bob.address =  Address(1, "main ave")

我知道 AddressManager 有关联。

这在技术上是不是不正确?据我了解,关联应该是parentclassEmployee。为什么pyreverse认为Address只是Manager的一个组成部分?

pyreverse 检测到您已经实例化了 Manager,这就是它认为 AddressManager 的一部分的原因。如果您在构造函数中创建 type hint,那么 pyreverse 应该检测 EmployeeAddress.

之间的正确关系