用于在python中组织层次结构类的文件结构

米特切普斯

我正在尝试在python中组织一些层次结构类,以期在其他地方重用这些子类-但仍然使用一种规范的表示形式。我知道这是子类化和继承的一部分,但是我几乎不了解实际的文件和目录组织。

这是我的情况。我想定义三个实体:

  1. 人们
  2. 组织机构
  3. 地址

人员和组织都可以有地址,但是地址无论是属于人员还是组织都始终相同。因此,我希望将相同的验证逻辑(例如“是否是有效的邮政编码?”)放在存储在项目中单个位置的单个Address类中,并让People and Organizations从该类中提取。即,人员和组织包含地址。

我想我将从JSON文档中实例化它们。

@ensure("zip", is_valid_zip)
class Address:
   def __init__(self,s):
      self.street = s.get('street')
      self.city = s.get('city')
      self.state = s.get('state')
      self.zip = s.get('zip')

>>> addr = Address({"street":"123 main st", "city": "Kalamazoo", "state": "MI","zip":"49001"})

现在,当我创建一个人时,我想添加地址。如果此人看起来像这样,并且创建它的字符串如下所示:

class Person:
   def __init__(self,s):
      self.fname = s.get('fname')
      self.lname = s.get('lname')
      self.address = Address(s.get('address'))
>>> bill = Person({'fname': "Billbert", "lname": "Bronson", "address": {"street":"123 main st", "city": "Kalamazoo", "state": "MI","zip":"49001"}})

>>> bill.address.street
>>> '123 main st'

...我应该在哪里存储这些模块,以及如何存储?我的项目中正确的导入位置在哪里?我有这样的东西...

schemas
├── schemas
│   ├── __init__.py
│   ├── people.py
│   ├── addresses.py
│   └── organizations.py
├── README.md
└── setup.py

其中__init__.py包含:

from schemas.addresses import Address
from schemas.people import Person
from schemas.organizations import Organization

但是这里有一些通告。Person类本身是否需要在其中导入Address语句?

现在,在我的新脚本中,我想说...

 >>> from schemas import Person
 >>> bill = Person({'fname': "Billbert", "lname": "Bronson", "address": {"street":"123 main st", "city": "Kalamazoo", "state": "MI","zip":"49001"}})

除其他问题外,当我尝试这种方法时,我得到一个错误

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/stuff/schemas/schemas/people.py", line 5, in __init__
    self.address = Address(s.get('address'))
NameError: global name 'Address' is not defined

...这让我担心我完全在树错误的继承树。

/正确/正确执行此操作的任何技巧将不胜感激-甚至包括诸如“这里是从JSON加载的替代方法”或“像这样疯狂的抽象类工厂之类的东西”之类的东西。

米特切普斯

一旦我正确地导入了语句,这实际上就可以正常工作。(是的,我确实必须在每个类中都导入子类,并且效果很好。)我接受这个作为答案,但是如果有人有更好的建议,欢迎您发布它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章