小编Mic*_*kov的帖子

如何在Python中定义PyCharm友好的值对象?

我很好奇在Python中定义值对象的好方法.每个维基百科:" 价值对象是一个小对象,代表一个简单的实体,其相等性不是基于身份:即当两个价值对象具有相同的价值时,它们是相同的,不一定是同一个对象".在Python中,本质上意味着重新定义__eq____hash__方法,以及不变性.

标准namedtuple似乎是几乎完美的解决方案,除了它们与PyCharm等现代Python IDE不能很好地兼容.我的意思是IDE不会真正提供有关定义为类的任何有用的见解namedtuple.虽然可以使用这样的技巧将docstring附加到这样的类:

class Point2D(namedtuple("Point2D", "x y")):
    """Class for immutable value objects"""
    pass
Run Code Online (Sandbox Code Playgroud)

根本没有地方可以对构造函数参数进行描述并指定它们的类型.PyCharm非常聪明,可以猜测Point2D"构造函数"的参数,但类型方面它是盲目的.

这段代码推入了一些类型信息,但它不是很有用:

class Point2D(namedtuple("Point2D", "x y")):
    """Class for immutable value objects"""
    def __new__(cls, x, y):
        """
        :param x: X coordinate
        :type x: float

        :param y: Y coordinate
        :type y: float

        :rtype: Point2D
        """
        return super(Point2D, cls).__new__(cls, x, y)

point = Point2D(1.0, 2.0)
Run Code Online (Sandbox Code Playgroud)

PyCharm在构造新对象时会看到类型,但是不会抓住那个点.x和point.y是浮点数,所以不会有助于检测它们的误用.而且我也不喜欢在常规基础上重新定义"魔法"方法的想法.

所以我正在寻找一些东西:

  • 就像普通的Python类或namedtuple一样容易定义
  • 提供价值语义(平等,散列,不变性)
  • 易于以一种可以与IDE很好地协作的方式进行记录

理想的解决方案可能如下所示:

class Point2D(ValueObject):
    """Class for immutable value objects""" …
Run Code Online (Sandbox Code Playgroud)

python pycharm

13
推荐指数
2
解决办法
2716
查看次数

是否可以在PyCharm中突出显示docstring中的错误类型引用

PyCharm类型提示很棒.我们在项目中广泛使用它.但是方法文档字符串中不时出现类型名称的拼写错误,并且错过了PyCharm在开发时可能发出警告的一些错误.

是否有可能让PyCharm警告我docstring中参数类型中的错误类型引用?例如,如果我输入错字:type num: lomg而不是:type num: long我想要lomg突出显示为警告.

python pycharm

5
推荐指数
1
解决办法
116
查看次数

在 ElasticSearch 中索引文档和在搜索结果中看到它之间有很长的延迟

我们在生产中遇到 ES 5.4.2 问题。大约 25% 的索引文档仅在索引请求成功响应 3 秒或更长时间后才会出现在搜索结果中。对于某些文档,它会超过 7 秒。我们的集群由三个具有 59GB RAM 的节点组成,其中 31GB 专用于 ES 堆。堆使用率永远不会超过 75%,GC 将其降至约 25-30%。索引速度相对较低,每秒不到 10 个文档。我们的平均刷新时间约为 300 毫秒。刷新间隔默认为 1s。

有了这些数字,我预计索引和搜索可用性之间最多有大约 1.5 秒的延迟。我在这里缺少什么?是否可以减少这种搜索可用性延迟?也许我错过了一些值得监控的指标?

performance elasticsearch

5
推荐指数
0
解决办法
393
查看次数

如何使用主目录中的服务主体管理 Azure AD B2C

我们正在运行 Azure AD B2C 对应用程序中的用户进行身份验证。我们还成功地用 Terraform 编写了几乎所有内容,并且对此非常满意。现在,我们尝试将这些清单移至 Azure Devops Pipelines 下,但遇到了访问问题。

Azure Pipelines 使用主(非 B2C)Active Directory 中的专用服务主体来执行其操作。我们在目标订阅中授予此 SP 足够的权限来处理 Terraform 资源。但我找不到任何方法来授予此 SP 对 B2C 目录的任何权限。我可以邀请主目录中的用户到 B2C,效果很好,但 SP 是一个应用程序,而不是用户。

有什么方法可以将应用程序从主目录“邀请”到B2C目录中吗?

azure terraform azure-ad-b2c azure-pipelines

5
推荐指数
1
解决办法
1384
查看次数

如何使用Scala实现的树与高阶集合函数一起使用?

我在Scala中有一个简单的树结构,如下所示:

sealed abstract class FactsQueryAst[FactType] {
}

object FactsQueryAst {
  case class AndNode[FactType](subqueries: Seq[FactsQueryAst[FactType]]) extends FactsQueryAst[FactType]
  case class OrNode[FactType](subqueries: Seq[FactsQueryAst[FactType]]) extends FactsQueryAst[FactType]
  case class Condition[FactType](fact: FactType, value: FactValue) extends FactsQueryAst[FactType]
}
Run Code Online (Sandbox Code Playgroud)

是否有任何相对简单的方法可以使此结构与高阶函数(如map,foldLeft或filter)一起使用?有关于为自己的集合实现Traversable特征的好文章(http://daily-scala.blogspot.com/2010/04/creating-custom-traversable.html),但它似乎过于复杂的树案例,或者在至少我错过了一些校长.

UPD.我试图实现如下的朴素Traversable,但它只会导致无限循环打印该值.

sealed abstract class FactsQueryAst[FactType] extends Traversable[FactsQueryAst.Condition[FactType]]

object FactsQueryAst {
  case class AndNode[FactType](subqueries: Seq[FactsQueryAst[FactType]]) extends FactsQueryAst[FactType] {
    def foreach[U](f: (Condition[FactType]) => U) {subqueries foreach {_.foreach(f)}}
  }
  case class OrNode[FactType](subqueries: Seq[FactsQueryAst[FactType]]) extends FactsQueryAst[FactType] {
    def foreach[U](f: (Condition[FactType]) => U) {subqueries foreach {_.foreach(f)}}
  }
  case class Condition[FactType](fact: FactType, …
Run Code Online (Sandbox Code Playgroud)

scala

3
推荐指数
1
解决办法
857
查看次数