我非常喜欢在Python中使用docstring来指定项目超出一定大小时的类型参数。
我很难找到用于指定参数是特定对象列表的标准,例如,在Haskell类型中,我会使用[String]或[a]。
当前标准(可由PyCharm编辑器识别):
def stringify(listOfObjects):
"""
:type listOfObjects: list
"""
return ", ".join(map(str, listOfObjects))
我更喜欢什么:
选择1
def stringify(listOfObjects):
"""
:type listOfObjects: list<Object>
"""
return ", ".join(map(str, listOfObjects))
选择2
def stringify(listOfObjects):
"""
:type listOfObjects: [Object]
"""
return ", ".join(map(str, listOfObjects))
我想这不是一个很好的例子——更相关的用例是列表中的对象必须是特定类型的。
更好的例子
class Food(Object):
def __init__(self, calories):
self.calories = calories
class Apple(Food):
def __init__(self):
super(self, 200)
class Person(Object):
energy = 0
def eat(foods):
"""
:type foods: [Food] # is NOT recognised by editor
"""
for food in foods:
energy += food.calories
所以,除了我饿了这一事实之外,这个例子说明了如果用错误类型的对象列表调用,代码就会中断。因此,记录的重要性不仅在于它需要一份清单,还在于它需要一份食物清单。
相关问题如何告诉PyCharm参数应为什么类型?请注意,我正在寻找一个比上面更具体的答案。
用python
type([1,2,3]) == type(['a', 'b', 'c'])
您还可以将字符串添加到整数列表中。
因此,对于您试图实现的目标,PyCharm必须在将其作为参数传递之前,神奇地检查您的整个代码,以了解您要添加到列表中的内容。
你可以看看这个问题Python:定义一个特定类型对象的列表
数组模块只允许基本值。
这里我能想到的唯一解决方案是创建自己的类,该类扩展python列表“FoodList”,可以在添加元素之前检查类型。
class Food():
def __init__(self, calories):
self.calories = calories
class FoodsList(list):
#you can optionally extend append method here to validate type
pass
def eat(foods):
"""
:type foods: FoodsList
"""
energy = 0
for food in foods:
energy += food.calories
return energy
list = FoodsList()
list.append(Food(3))
list.append(Food(4))
print eat(list)
正如PyCharm文档中指出的,一种(传统的,PEP-484之前的)方法是使用方括号:
列表[Foo]:Foo元素的列表
口授[口授,口授]:口授从口授到口授
str列表
,如已接受的答案所示,在PyCharm中无法按预期工作。
从Python 3.5和PEP-484的实现开始,您还可以使用类型提示,这可能是您的IDE/编辑器很好地支持的。这里解释了如何在PyCharm中轻松完成这一点。
本质上,使用类型暗示(Python)声明列表返回类型
from typing import List
"""
Great foo function.
:rtype: list[str]
"""
def foo() -> List[str]:
return ['some string', 'some other string']
在这里,我们声明(有些冗余)函数foo
返回字符串列表,都在类型hint-
其他预先声明的类型和更多信息可以在Python文档中找到。
在PyCharm手册的评论部分,开发者给出了一个很好的提示:
#: :type: dict of (str, C)
#: :type: list of str
它对我很有效。现在我想知道在Python中记录参数化类的最佳方式是什么:)。
我想定义一个函数。将多个元素展平为一个数组的展平函数。我知道以下是不可能的,但基本上我想这样做: 我得到以下错误: 使用.reduce()重写.flant有什么好方法吗? 注意:我知道还有很多其他方法可以在javascript中展平数组,但是我想知道的是如何使用特定的参数来做到这一点。
问题内容: 我想将某些类型为ParentClass的字段作为json字符串存储到我的数据库中。我不想使用Serializable接口和DataType.SERIALIZABLE导致它与序列化类的完整类名相关联。 所以我正在使用以下代码: 持久性类的一种: 这是我遇到的两个问题: 我没有得到如何指定从对象到字符串的自定义转换的信息。似乎ORMLite调用Object.toString()以获得对象的
我有一个LINQ查询的情况。它有两个连接(一对多),但它会带回连接表中的所有列。我不确定如何创建LINQ查询,以便只从连接的表中返回几个字段。 这不管用。。。我得到一个错误:“o”不在范围内。 基本上输出应该如下: 会员资格 我是LINQ的新手,我已经为此奋斗了太久。
问题内容: 我有一个对象列表。对象具有3个字符串属性。我想制作一个仅包含类中特定属性的列表。 有内置的功能可以做到这一点吗? 问题答案: 列表理解会很好地工作: 但是,由于您要求:-),所以有内置功能的组合。
问题内容: 如果我有一个水果列表,其中包含各种实现,如,等。该列表是必需的,因为其他方法会对列表中的所有水果执行常规操作。 如何将特定类型的所有对象从列表中删除?例如所有的苹果?进行instanceof / if-else检查非常难看,尤其是在有许多不同的类时。 如何改善以下内容? 问题答案: 您应该知道-实例是不好的代码实践。 编写.getType()(返回的对象的枚举类型)怎么办?
假设我有以下类及其接口 步骤1:使用Autofac在测试项目中设置构造函数: 步骤2:设置测试 现在,我如何注入配置器未知但“MyApplication”已知的参数“value”? 在我想要这么做之前 但是现在我正在尝试我们依赖反转和依赖注入,最终出现了上面描述的问题。