我试图让一个 Pydantic 模型中的一个字段接受我单独定义的一组 BaseModel 派生类或子类中的任何一个。阅读此处的文档,我天真地执行了以下操作,但失败了;然后我意识到我误读了文档,并且在这种情况下“字段可能只接受类(而不是实例)”,而且该示例中的 Foo 和 Bar 并不是从 BaseModel 本身派生的(这很重要吗?) 。
我猜我从一开始就误解了这一点,所以我的问题是:是否有一种正确的方法可以完成我想要做的事情,而无需在子类上使用 Union,或者完全使用其他更好的方法?
额外问题:只能接受类而不接受实例的常见用例是什么?
再次:
from pydantic import BaseModel
from typing import Type, Union
class Foo(BaseModel):
pass
class Bar(Foo):
pass
class Baz(Foo):
pass
class Container(BaseModel):
some_foo: Type[Foo] # this fails
# this will run successfully --> some_foo: Union[Bar, Baz]
b = Baz()
c = Container(some_foo = b)
# Traceback (most recent call last):
# File "mre.py", line 20, in <module>
# c = Container(some_foo = b)
# …Run Code Online (Sandbox Code Playgroud) 我正在构建一个使用geom_tile然后将其输出到.pdf的图(使用pdf("filename",...)).然而,当我这样做时,.pdf结果有很小的线条(条纹,正如一个人所说的那样)穿过它.我附上了一张显示问题的图片. 
谷歌搜索让这个线程,但唯一真正的建议是尝试将size = 0传递给geom_tile,我做了没有效果.关于我如何解决这些问题的任何建议?我想用它作为纸上的数字,但它不会像这样工作.
最小代码:
require(ggplot2)
require(scales)
require(reshape)
volcano3d <- melt(volcano)
names(volcano3d) <- c("x", "y", "z")
v <- ggplot(volcano3d, aes(x, y, z = z))
pdf("mew.pdf")
print(v + geom_tile(aes(fill=z)) + stat_contour(size=2) + scale_fill_gradient("z"))
Run Code Online (Sandbox Code Playgroud) 我正在编写的应用程序 ( http://code.google.com/p/blazingstars/issues/detail?id=25 )遇到问题,其中我的程序是一个 menulet(菜单栏)应用程序,它使用与另一个程序交互和控制另一个程序的辅助功能 API。我做一些通常的事情,比如注册 API 通知和通过 API 调用获取窗口列表等,但我不久前意识到,如果我的程序在我正在交互的程序之后的第二个空间(虚拟桌面)中启动with 是在第一个启动的,我的程序将崩溃并烧毁,因为它无法访问有关其目标的任何信息。(有没有办法解决我遗漏的问题?)
一个简单的解决方案是弹出一个对话框,要求用户在正确的空间中重新启动程序,但在我的一生中,我无法弄清楚如何通过 NSWorkspace 或 Accessibility API 来判断我的目标所在的空间,以便我可以将它与我所在的空间进行比较。有什么想法吗?
请注意,将收集行为设置为 NSWindowCollectionBehaviorCanJoinAllSpaces 对我没有任何好处,因为我必须在启动时做大量工作,所以我必须从一开始就与目标处于同一空间。
我希望这并不像感觉那么简单.我有一个基本目录设置:
root --> Paper
--> Code
Run Code Online (Sandbox Code Playgroud)
我正在写一篇论文.我想从Paper目录中的knitr文档中调用Code目录中的Python脚本(类似于此,但使用Python而不是R).所以它会是这样的:
Python脚本testit.py
## @knitr testit
import os
print os.getcwd()
Run Code Online (Sandbox Code Playgroud)
knitr document test.Rnw保存在Code目录中:
\documentclass{article}
\begin{document}
<<setup,echo=FALSE>>=
read_chunk("testit.py")
@
<<testit,engine='python'>>=
@
\end{document}
Run Code Online (Sandbox Code Playgroud)
当我编译成PDF时,答案是正确的:
## /Users/blah/foo/bar/Code
Run Code Online (Sandbox Code Playgroud)
但是文件test-2.Rnw保存在Paper目录中:
\documentclass{article}
\begin{document}
<<setup,echo=FALSE>>=
opts_knit$set(root.dir="../Code/")
read_chunk("../Code/testit.py")
@
<<testit,engine='python'>>=
@
\end{document}
Run Code Online (Sandbox Code Playgroud)
输出:
## /Users/blah/foo/bar/Paper
Run Code Online (Sandbox Code Playgroud)
root.dir在这里没有像R块那样明显的效果,我不知道还有什么可以尝试更改Python块的目录.这是一个问题,因为我希望python脚本对Code目录中的文件进行操作,但当然它找不到它们.我可以在python脚本中硬编码目录更改,但这似乎很脆弱.我甚至很高兴将根目录直接传递给python解释器作为脚本的参数,这是可能的(但我不这么认为,因为knitr使用python -c?).有关如何处理这个问题的任何想法?我的google-fu在这里失败了......
我正在尝试将一个iPython Qtconsole嵌入到PyQt5应用程序中.嵌入式控制台工作正常,但当我尝试退出应用程序时(通过单击"退出",使用Cmd-Q),Python进程挂起,我必须强制退出以解除旋转的死亡沙滩球.这是在OS X 10.10.2,Python 2.7.9,iPython 3.0.0和PyQt5 5.3.1上.有关如何正常戒烟的任何想法?
最小的例子,改编自iPython示例:
#!/usr/bin/env python
from PyQt5 import Qt
from internal_ipkernel import InternalIPKernel
class SimpleWindow(Qt.QWidget, InternalIPKernel):
def __init__(self, app):
Qt.QWidget.__init__(self)
self.app = app
self.add_widgets()
self.init_ipkernel('qt')
def add_widgets(self):
self.setGeometry(300, 300, 400, 70)
self.setWindowTitle('IPython in your app')
# Add simple buttons:
self.console = Qt.QPushButton('Qt Console', self)
self.console.setGeometry(10, 10, 100, 35)
self.console.clicked.connect(self.new_qt_console)
self.namespace = Qt.QPushButton('Namespace', self)
self.namespace.setGeometry(120, 10, 100, 35)
self.namespace.clicked.connect(self.print_namespace)
self.count_button = Qt.QPushButton('Count++', self)
self.count_button.setGeometry(230, 10, 80, 35)
self.count_button.clicked.connect(self.count)
# Quit and cleanup
self.quit_button = …Run Code Online (Sandbox Code Playgroud) 我有一个iOS6去年和我一起玩的旧应用程序; 它只适用于我的妻子,所以我从未放过它,但我想把它弄脏,看看它是否对其他人有用.所以我加载它XCode5(5.0.2在10.8.4上运行;我也在我的家用笔记本电脑上试过这个XCode and Mavericks).但是,虽然应用程序构建并运行良好,但我的任何NSLog语句都没有出现在控制台中,在任何一台计算机上.我已经清理,重建,在我拥有的每台模拟器和iPad上运行它,通过设置搜索,撕掉我的头发等等,但我无法弄清楚如何让它们出现.我开始了一个新的iOS应用程序,以确保它不是我的设置,但从NSLogs那里工作就好了.不幸的是,我甚至不确定从哪里开始寻找解决方案.有没有人对我应该在这里探索的方向有任何想法?谢谢!
编辑:我只是尝试将文件复制到一个新项目,现在NSLogs正在出现!仍然没有想到为什么他们没有出现在旧项目中.
Edit2:这不仅仅是用户错误; 我可以使用复制的文件查看来自新项目的日志消息(参见图像).当我运行它时,它们只是不显示在旧项目中.
