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
无法识别 Employee
和 Address
之间存在 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")
我知道 Address
与 Manager
有关联。
这在技术上是不是不正确?据我了解,关联应该是parentclassEmployee
。为什么pyreverse
认为Address
只是Manager
的一个组成部分?
pyreverse
检测到您已经实例化了 Manager
,这就是它认为 Address
是 Manager
的一部分的原因。如果您在构造函数中创建 type hint,那么 pyreverse
应该检测 Employee
和 Address
.
之间的正确关系
假设我有以下目录结构:
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
无法识别 Employee
和 Address
之间存在 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")
我知道 Address
与 Manager
有关联。
这在技术上是不是不正确?据我了解,关联应该是parentclassEmployee
。为什么pyreverse
认为Address
只是Manager
的一个组成部分?
pyreverse
检测到您已经实例化了 Manager
,这就是它认为 Address
是 Manager
的一部分的原因。如果您在构造函数中创建 type hint,那么 pyreverse
应该检测 Employee
和 Address
.