我得到一个错误:
NameError: name 'OrgUnit' is not defined
class OrgUnit(object):
def __init__(self,
an_org_name: str,
its_parent_org_unit: OrgUnit= None
):
self.org_unit_name = an_org_name
self.parent_org_unit = its_parent_org_unit
def __str__(self):
if self.parent_org_unit:
parent_org_unit_name = self.parent_org_unit.__str__()
return parent_org_unit_name + "->" + self.org_unit_name
else:
return self.org_unit_name
if __name__ == '__main__':
ibm_worldwide = OrgUnit("IBM_Worldwide")
ibm_usa = OrgUnit("IBM_USA", ibm_worldwide)
ibm_asia = OrgUnit("IBM_Asia", ibm_worldwide)
ibm_china = OrgUnit("IBM_China", ibm_asia)
print(ibm_worldwide)
print(ibm_usa)
print(ibm_asia)
print(ibm_china)
我确信这是一个已知的范例,因为它似乎是一个非常常见的层次类使用问题(自引用类)。我知道我可以将的父组织单元的类型更改为
对象,并且可以正常工作,但这似乎是错误的,主要是因为它妨碍了我在通话中检查类型的能力。通过
将其上级组织单元
更改为类型对象
我得到了正确的结果:
IBM_Worldwide
IBM_Worldwide->IBM_USA
IBM_Worldwide->IBM_Asia
IBM_Worldwide->IBM_Asia->IBM_China
我愿意接受想法和建议。做这种事情最“蟒蛇”的方式是什么?
PS:这种“自引用类”范例/问题的名称是什么,我可以用它来查找其他建议?
匿名用户
您的问题是,您希望使用类型提示,但希望该类本身能够接受其自身类型的参数。
类型提示PEP(0484)说明可以使用类型名称的字符串版本作为转发引用。这里的例子是一个树
数据结构,它听起来与这个组织单元
非常相似。
例如,这是有效的:
class OrgUnit(object):
def __init__(self,
an_org_name: str,
its_parent_org_unit: 'OrgUnit' = None
):
在Python 3.7中,您将能够使用来自导入注释的激活__future__注释的延迟计算。这将自动将注释存储为字符串,而不是计算它们,因此您可以执行
from __future__ import annotations
class OrgUnit(object):
def __init__(self,
an_org_name: str,
its_parent_org_unit: OrgUnit= None
):
...
这将成为Python 4.0中的默认设置。
问题内容: 我得到错误: 我确信这是一个已知的范例,因为这似乎是一个非常常见的分层类使用问题(一个自引用类)。我知道我可以将be的类型更改为有效,但是这样做似乎是错误的事情,主要是因为它削弱了我检查呼叫类型的能力。随着改变是一种类型的我得到正确的结果: 我愿意考虑和提出建议。做这种事情的最“ pythonic”方法是什么? PS:这种“自我引用类”范式/问题的名称是什么,我可以用它来查找其他建议吗
以下代码不能按预期工作。显然,我不能在类定义中使用类自己的类型: 运行它的结果是: 此外,使用检查代码会返回: 如何将此代码更正为对Python和mypy有效?
我想检查变量是否为类型。对于其他类型,我们可以执行以下操作: 但是对于来说,这种简单的方法是不可能的。也就是说,我们不能说。还有别的办法吗?为什么这对某些类型是可能的,而对其他类型是不可能的?非常感谢。
我试图在Python3.5中使用类型提示。1,代码如下: 我猜在解析类型A时,类型A还没有完全构造,这是范围界定的问题,但我不理解为什么这样的语法不正确。是否有其他方式来表达它,或者它只是一个非法的构造? 我想在基类中使用这个语法提示,它可以在树状层次结构中组成派生类。
问题内容: 我必须怎么做才能将自定义类型的对象用作Python字典中的键(我不希望“对象id”用作键),例如 如果名称和位置相同,我想将MyThing用作相同的键。从C#/ Java开始,我习惯于重写并提供一个equals和hashcode方法,并保证不会突变该hashcode依赖的任何内容。 我必须在Python中做什么才能完成此任务?我应该吗? (在一个简单的例子中,就像这里一样,也许最好将一
问题内容: 就像我们使用__ToString一样,有没有一种方法来定义铸造方法? 问题答案: 无需在php中键入强制类型转换。 编辑: 由于这个话题似乎引起一些混乱,我想我要详细说明一下。 在Java之类的语言中,有两种可能带有类型。编译器有一个关于类型的概念,而运行时还有一个关于类型的想法。编译器的类型与变量相关,而运行时引擎则跟踪值的类型(已将其分配给变量)。变量类型在编译时是已知的,而值类型