我最近发现了Python的property内置函数,它将类方法getter和setter伪装成类的属性.我现在很想以我认为不合适的方式使用它.
property如果类A具有_x您想要限制的允许值的属性,那么使用关键字显然是正确的做法; 即,它将取代用C++编写的构造getX()和setX()构造.
但是在哪里将函数作为属性是合适的呢?例如,如果你有
class Vertex(object):
def __init__(self):
self.x = 0.0
self.y = 1.0
class Polygon(object):
def __init__(self, list_of_vertices):
self.vertices = list_of_vertices
def get_vertex_positions(self):
return zip( *( (v.x,v.y) for v in self.vertices ) )
Run Code Online (Sandbox Code Playgroud)
是否适合添加
vertex_positions = property( get_vertex_positions )
Run Code Online (Sandbox Code Playgroud)
?
让发电机看起来像财产一样可以吗?想象一下,如果我们的代码中的更改意味着我们不再Polygon.vertices以相同的方式存储.那么添加它可以Polygon吗?
@property
def vertices(self):
for v in self._new_v_thing:
yield v.calculate_equivalent_vertex()
Run Code Online (Sandbox Code Playgroud) 我根据README.md文件安装了ensime,但是,我在inferior-ensime-server缓冲区中遇到以下错误:
INFO: Fatal Error: scala.tools.nsc.MissingRequirementError: object scala not found.
scala.tools.nsc.MissingRequirementError: object scala not found.
at scala.tools.nsc.symtab.Definitions$definitions$.getModuleOrClass(Definitions.scala:516)
at scala.tools.nsc.symtab.Definitions$definitions$.ScalaPackage(Definitions.scala:43)
at scala.tools.nsc.symtab.Definitions$definitions$.ScalaPackageClass(Definitions.scala:44)
at scala.tools.nsc.symtab.Definitions$definitions$.UnitClass(Definitions.scala:89)
at scala.tools.nsc.symtab.Definitions$definitions$.init(Definitions.scala:786)
at scala.tools.nsc.Global$Run.(Global.scala:593)
at scala.tools.nsc.interactive.Global$TyperRun.(Global.scala:473)
at scala.tools.nsc.interactive.Global.newTyperRun(Global.scala:535)
at scala.tools.nsc.interactive.Global.reloadSources(Global.scala:289)
at scala.tools.nsc.interactive.Global$$anonfun$reload$1.apply(Global.scala:300)
at scala.tools.nsc.interactive.Global$$anonfun$reload$1.apply(Global.scala:300)
at scala.tools.nsc.interactive.Global.respond(Global.scala:276)
at scala.tools.nsc.interactive.Global.reload(Global.scala:300)
at scala.tools.nsc.interactive.CompilerControl$$anon$1.apply$mcV$sp(CompilerControl.scala:81)
at scala.tools.nsc.interactive.Global.pollForWork(Global.scala:132)
at scala.tools.nsc.interactive.Global$$anon$2.run(Global.scala:192)
也:
INFO: Fatal Error: scala.tools.nsc.MissingRequirementError: class scala.Array not found.
scala.tools.nsc.MissingRequirementError: class scala.Array not found.
at scala.tools.nsc.symtab.Definitions$definitions$.getModuleOrClass(Definitions.scala:516)
at scala.tools.nsc.symtab.Definitions$definitions$.getClass(Definitions.scala:474)
at scala.tools.nsc.symtab.Definitions$definitions$.ArrayClass(Definitions.scala:217)
at scala.tools.nsc.backend.icode.TypeKinds$REFERENCE.(TypeKinds.scala:258)
at scala.tools.nsc.backend.icode.GenICode$ICodePhase.(GenICode.scala:55)
at scala.tools.nsc.backend.icode.GenICode.newPhase(GenICode.scala:43)
at scala.tools.nsc.backend.icode.GenICode.newPhase(GenICode.scala:25)
at scala.tools.nsc.Global$Run$$anonfun$4.apply(Global.scala:606) … 如何使用SQL Server Management Studio查看SQL Server数据库中的所有功能(内置)?
我很惊讶这个问题之前没有问过SO(好吧,至少我找不到它).
你有没有在C++中设计一个方法回调模式(类似于类方法的"指针"),如果是这样,你是怎么做到的?
我知道一个方法只是一个常规函数,带有一些隐藏this参数作为上下文,我有一个非常简单的设计.然而,由于事情往往比它们看起来更复杂,我想知道我们的C++ 专家如何实现这一点,最好是以优雅和标准的方式.
欢迎所有建议!
如果我的应用程序在同一台计算机上运行,甚至在同一局域网中的不同计算机上运行,并且需要密切和快速的通信,那么使用文本编码的Web服务和HTTP似乎是不合逻辑的.我可以使用IP/TCP/UDP套接字并发明我自己的协议,但是相信.Net应用程序有一种标准的方式来发送/接收对象实例(甚至可能通过引用共享一个对象?).你能告诉我那种标准方式是什么吗?我只对.Net Framework 4应用程序感兴趣,不需要支持遗留框架.
我花了一个多小时来使用cPickle读取1 GB的NetworkX图形数据结构(当它作为二进制pickle文件存储在磁盘上时,它的1 GB).
请注意,该文件会快速加载到内存中.换句话说,如果我跑:
import cPickle as pickle
f = open("bigNetworkXGraph.pickle","rb")
binary_data = f.read() # This part doesn't take long
graph = pickle.loads(binary_data) # This takes ages
Run Code Online (Sandbox Code Playgroud)
如何加快上次操作?
请注意,我尝试使用二进制协议(1和2)来腌制数据,并且我使用的协议似乎没有太大区别.另请注意,虽然我使用上面的"装载"(意思是"加载字符串")函数,但它正在加载二进制数据,而不是ascii-data.
我正在使用的系统上有128GB的RAM,所以我希望有人会告诉我如何增加一些隐藏在pickle实现中的读缓冲区.
我有一个对象的集合,我知道我可以按照NAME(字符串类型)排序
collEquipment.Sort((x, y) => string.Compare(x.ItemName, y.ItemName));
Run Code Online (Sandbox Code Playgroud)
这样可行.
但我想按ID(整数类型)排序,并且没有Int32.Compare这样的东西
那我该怎么做?这不起作用
collEquipment.Sort((x, y) => (x.ID < y.ID)); //error
Run Code Online (Sandbox Code Playgroud)
我知道答案很简单.Lambda的表达让我很困惑.
我差不多准备好发布我的vb.net应用程序了.我有几个目前从c:/ temp加载的picturebox文件
我需要将此目录更改为可在用户将其安装到PC时使用的目录.
我的问题是我该怎么做?有没有办法获取安装路径,然后在代码中使用它作为变量?eg: myInstalledPath & "/xxx.jpg"
或者......在mydocuments结构中使用mypictures会更好吗?我宁愿将所有创建的图像文件保存在一个对用户更隐蔽的文件夹中(通过隐藏我的意思是不会弄乱他们自己的图像文件夹!)
我已经尝试过搜索这个,但我似乎得到了不同的结果而没有真正的答案......(可能会搜索错误的东西!)
grid.getcolumnModel().setHidden(0,true)将对列菜单而不是网格面板生效.在列菜单中,您可以启用或禁用该列.我们如何动态添加或删除网格面板中的列?
我试图将自定义对话框的位置保存到用户注册表,以便当他们重新加载相同的对话框时,它会显示在他们移动的相同位置或将其重新调整为以前.我正在保存窗口X位置Y位置宽度和高度.除了对话框最小化时,一切正常.如果对话框最小化并且用户右键单击任务栏上的对话框表示(Windows 7),则可以单击"关闭此窗口".奇怪的是,数字-32030作为X和Y位置保存在注册表中,但宽度和高度得到正确保存.知道这个号码来自何处以及在这种情况下该怎么办thx
c# ×3
python ×2
c++ ×1
c++11 ×1
callback ×1
collections ×1
ensime ×1
extjs ×1
extjs3 ×1
function ×1
installation ×1
interop ×1
lambda ×1
methods ×1
pickle ×1
properties ×1
scala ×1
sql-server ×1
vb.net ×1
wpf ×1