1

假设我有以下目录结构:

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

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

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

在此处输入图像描述

pyreverse不承认Employee和之间存在复合组件关系Address。但是,如果我重构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.

在此处输入图像描述

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

4

1 回答 1

2

pyreverse检测到您已经实例化Manager,这就是为什么它认为AddressManager. 如果您在构造函数中进行类型提示,则应该检测和pyreverse之间的正确关系。EmployeeAddress

于 2021-12-12T13:45:38.673 回答