我创建了一个class String()与__get__(),__set__(),和的方法to_db(); 但是,当我这样做时name = String(),我不能这样做,self.name.to_db()因为它正在调用to_db()返回的值__get__(),而不是对象" name".
class String(object):
def __init__(self, value=None):
if value:
self.value = str(value)
def __get__(self, instance, owner):
return self.value
def __set__(self, instance, value):
self.value = str(value)
def to_db(self):
return {'type':'string', 'value': self.value}
class Example(object):
name = String()
age = Integer()
def __init__(self,name,age):
self.name = name
self.age = age
def save():
data = dict(name=self.name.to_db(), age=self.age.to_db())
db.save(data)
Run Code Online (Sandbox Code Playgroud)
解决这个问题的一种方法是不self.name.to_db()直接调用,而是设置一个标志instance并创建一个条件 …
作为一个Clojure学习练习,我正在移植Bulbs(http://bulbflow.com),这是我编写的图形数据库库,从Python到Clojure.
我仍然有点模糊的一件事是如何以Clojure惯用方式构建库.
为了支持多个数据库,Bulbs使用依赖注入.在实现接口的自定义Client类中抽象出不同的数据库后端,并在运行时配置客户端.
Graph对象及其各种代理对象包含低级Client对象的实例:
# bulbs/neo4jserver/graph.py
class Graph(object):
default_uri = NEO4J_URI
def __init__(self, config=None):
self.config = config or Config(self.default_uri)
self.client = Neo4jClient(self.config)
self.vertices = VertexProxy(Vertex, self.client)
self.edges = EdgeProxy(Edge, self.client)
Run Code Online (Sandbox Code Playgroud)
您可以通过为相应的图形数据库服务器创建Graph对象来使用Bulbs:
>>> from bulbs.neo4jserver import Graph
>>> g = Graph()
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过代理对象在数据库中创建顶点和边:
>>> james = g.vertices.create(name="James")
>>> julie = g.vertices.create(name="Julie")
>>> g.edges.create(james, "knows", julie)
Run Code Online (Sandbox Code Playgroud)
这种设计使得从REPL中使用Bulbs变得容易,因为您只需导入并实例化Graph对象(或者如果需要,可以传入自定义Config对象).
但我不确定如何在Clojure中使用此设计,因为Graph对象及其代理需要保存在运行时配置的Client对象.
Clojure的做法是什么?
更新:这就是我最终做的......
;; bulbs/neo4jserver/client.clj
(def ^:dynamic *config* default-config)
(defn set-config!
[config]
(alter-var-root #'*config* (fn [_] (merge default-config config))))
(defn neo4j-client
[& [config]]
(set-config! …Run Code Online (Sandbox Code Playgroud) 我正在尝试用ant构建一个“ uberjar”,并且该项目有一个包含几个属性文件的config目录。
如何将配置目录添加到build.xml?
这是一个如何被引用的例子:
static private String CONFIG_DIR = "config/";
static public String CONFIG_FILE = "proj.properties";
File configFile = new File(CONFIG_DIR, CONFIG_FILE);
Run Code Online (Sandbox Code Playgroud)
config目录中有多个属性文件。通常我只是将其添加到类路径中:
java -classpath bin:lib/*:config some.project.Example
Run Code Online (Sandbox Code Playgroud)
这是我的build.xml目标,它不太正确:
<target name="uberjar" depends="compile">
<jar jarfile="${babelnet.jar}">
<fileset dir="${bin.dir}">
<include name="**/*.class"/>
</fileset>
<zipgroupfileset dir="lib" includes="*.jar"/>
</jar>
<copy todir="config">
<fileset dir="config">
<include name="**/*.properties"/>
</fileset>
</copy>
</target>
Run Code Online (Sandbox Code Playgroud) 如何在Python中模拟赋值运算符重载?例如...
class Example(object):
name = String()
age = Integer()
def __init__(self,myname,myage):
self.name.value = myname
self.age.value = myage
Run Code Online (Sandbox Code Playgroud)
而不是做self.name.value = name,你如何模拟赋值运算符的重载,以便当你执行self.name = myname时,myname被赋值给self.name.value?
Wordnet 3.0 ( http://semanticweb.cs.vu.nl/lod/wn30/ ) 是 Turtle 格式,我无法让 org.openrdf.rio.turtle.TurtleParser 解析 Manifest.ttl 文件 ( https: //gist.github.com/1181802)。
看起来解析器没有正确处理前缀——显然它认为它们是空的:
org.openrdf.rio.RDFParseException: org.openrdf.rio.RDFParseException:
Not a valid (absolute) URI: nullwn30 [line 15]
Run Code Online (Sandbox Code Playgroud)
我以前从未涉足过 RDF 加载空间,所以很可能我遗漏了一些东西。
关于在哪里看的任何想法?
Amazon / AWS EC2提供了SR-IOV(单根I / O虚拟化)实例,它被称为“ 增强网络 ” -Google 是否在Compute Engine上提供了此实例?
具体地说,是否有任何GCE实例类型都能够绕过虚拟机管理程序并直接访问多队列NIC?
要利用Scylla DB的体系结构,需要SRV-IOV支持吗?
HN讨论:https : //news.ycombinator.com/item? id =10262719
virtualization networking google-compute-engine google-cloud-platform scylla
当调用setattr时,当尝试设置some_prop的值时,这会导致无限递归循环,some_prop是具有setter的属性:
class TypeSystem(object):
def __setattr__(self, key, value):
if the_special_case is True:
# do something
else:
super(TypeSystem,self).__setattr__(key,value)
class Entity(TypeSystem):
@property
def some_prop(self):
some_prop = self.data.get('some_prop')
if some_prop is None and hasattr(self,"some_prop"):
some_prop = self.some_prop
return some_prop
@some_prop.setter
def some_prop(self,value):
self.some_prop = value
>>> entity = Entity()
>>> entity.some_prop = 3
Run Code Online (Sandbox Code Playgroud)
这适用于未定义为属性的普通属性,因为Super调用object的setattr来阻止递归循环.
但是因为some_prop没有预先定义,所以看起来调用setattr而不是some_prop的setter,所以它被拉入循环.
我也试过这个......
@some_prop.setter
def some_prop(self, value):
super(TypeSystem, self).__setattr__("some_prop", value)
Run Code Online (Sandbox Code Playgroud)
但它仍然进入递归循环.我没有看到如何避免它.
我正在获取IllegalArgumentException: Can't find matching method: render, leave off hints for auto match,但是我需要类型提示来重载该方法。我想念什么...?
(defprotocol LinkRendererProtocol
(render
[this node]
[this node text]
[this node url title text]
))
(deftype LinkRenderer [handlers]
LinkRendererProtocol
(render [this ^AutoLinkNode node]
(rendering :auto-link handlers node))
(render [this ^ExpLinkNode node text]
(rendering :exp-link handlers node text))
(render [this ^ExpImageNode node text]
(rendering :exp-image-link handlers node text))
(render [this ^MailLinkNode node]
(rendering :mail-link handlers node))
(render [this ^RefLinkNode node url title text]
(rendering :ref-link handlers node url …Run Code Online (Sandbox Code Playgroud) 我正在尝试将词性功能的输出传递到index-words函数中,并使用( - >)线程宏打印结果输出:
(defn parts-of-speech []
(seq (. POS values)))
(defn index-words [pos]
(iterator-seq (. dict getIndexWordIterator pos)))
(-> (parts-of-speech) index-words println)
Run Code Online (Sandbox Code Playgroud)
但是index-words func返回一个iterator-seq,我不知道如何在这个上下文中迭代它,因为我是Clojure的新手.
编辑:根据建议更新代码.
更新:
感谢@kotarak和@ jayunit100的回答以及来自@ sw1nn和@ marko-topolnik的评论,我至少有两个有效的变体:
(->> (parts-of-speech) (map index-words) (map println) doall)
(doseq [w (map index-words (parts-of-speech))]
(println w))
Run Code Online (Sandbox Code Playgroud)
我来自一个命令性的背景,我的这个问题的目标是理解线程宏,试图编写更多惯用的Clojure(在尝试使用线程宏之前,我使用multiple doseq和lets 循环遍历每个序列).
从评论来看,似乎线程宏可能不是最惯用的方式,但我仍然希望看到如何使它工作,所以我可以填补这个理解的空白.
此外,(parts-of-speech)返回一个包含四个项目的序列,如果您执行a (println (count w))而不是(println w),则可以看到它打印四个序列的计数而不是一个连续序列:
(doseq [w (map index-words (parts-of-speech))]
(println (count w)))
;= 117798
;= 11529
;= 21479
;= 4481
Run Code Online (Sandbox Code Playgroud)
你如何修改上面的内容来打印一个连续的单词流而不是打印四个序列的内容?
BTW:上面的代码包含了MIT Java …
我正在尝试在Groovy源文件上运行Clojure正则表达式来解析各个函数.
// gremlin.groovy
def warm_cache() {
for (vertex in g.getVertices()) {
vertex.getOutEdges()
}
}
def clear() {
g.clear()
}
Run Code Online (Sandbox Code Playgroud)
这是我在Clojure中使用的模式:
(def source (read-file "gremlin.groovy"))
(def pattern #"(?m)^def.*[^}]")
(re-seq pattern source)
Run Code Online (Sandbox Code Playgroud)
然而,它只抓住了第一行,而不是多线功能.
我希望能够打电话给'person.Person.类 "并取回'类person.Person’,像它用于一个Person对象:
>>> p = person.Person()
>>> p.__class__
<class 'person.Person'>
>>> person.Person.__class__
<class 'perframe.datatype.TypeSystemMeta'>
Run Code Online (Sandbox Code Playgroud)
这是Person继承树......
class TypeSystem(object):
__metaclass__ = TypeSystemMeta
class Model(TypeSystem):
pass
class Node(Vertex,Model):
pass
class Person(Node):
pass
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
python reflection inheritance multiple-inheritance method-resolution-order
python ×5
clojure ×4
java ×3
ant ×1
build ×1
descriptor ×1
groovy ×1
inheritance ×1
iterator ×1
networking ×1
rdf ×1
reflection ×1
regex ×1
scylla ×1
sequence ×1
sesame ×1