这个问题不是讨论单例devise模式是否合意,是反模式还是任何宗教战争,而是讨论如何在python中最好的实现这种模式。 在这种情况下,我把“最pythonic”定义为遵循“最不惊讶的原则” 。 我有多个类将成为单身(我的用例是一个logging器,但这不是重要的)。 当我可以简单地inheritance或装饰时,我不希望杂乱地加上几个类似的东西。 最好的方法: 方法1:一个装饰器 def singleton(class_): instances = {} def getinstance(*args, **kwargs): if class_ not in instances: instances[class_] = class_(*args, **kwargs) return instances[class_] return getinstance @singleton class MyClass(BaseClass): pass 优点 装饰器是以一种比多重inheritance更直观的方式添加的。 缺点 虽然使用MyClass()创build的对象将是真正的单例对象,MyClass本身是一个函数,而不是一个类,所以你不能从它调用类的方法。 另外对于m = MyClass(); n = MyClass(); o = type(n)(); m = MyClass(); n = MyClass(); o = type(n)(); 那么m […]
片段似乎是非常好的UI界面逻辑分成一些模块。 但是与ViewPager一起,它的生命周期对我来说还是很ViewPager的。 所以大师的想法是非常需要的! 编辑 看到下面的愚蠢的解决scheme;-) 范围 主要活动有一个带片段的ViewPager 。 这些片段可以为其他(子域)活动实现一些不同的逻辑,所以片段的数据通过活动内的callback接口填充。 而一切正常的第一次发射,但!! 问题 当活动被重新创build(例如在方向改变时), ViewPager的片段也是如此。 代码(你会发现下面)说,每一次创build活动,我尝试创build一个新的ViewPager片段适配器相同的片段(也许这是问题),但FragmentManager已经有所有这些片段存储的地方(?并启动这些娱乐机制。 因此,娱乐机制调用onAttach,onCreateView等“旧”片段与我的callback接口调用启动数据通过活动的实施方法。 但是这个方法指向通过Activity的onCreate方法创build的新创build的片段。 问题 也许我正在使用错误的模式,但即使Android 3 Pro书也没有太多的关于它。 所以, 请给我一个两拳,指出如何正确的做法。 非常感谢! 码 主要活动 public class DashboardActivity extends BasePagerActivity implements OnMessageListActionListener { private MessagesFragment mMessagesFragment; @Override protected void onCreate(Bundle savedInstanceState) { Logger.d("Dash onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.viewpager_container); new DefaultToolbar(this); // create fragments to use mMessagesFragment = […]
如何从当前工作树中删除未跟踪的本地文件?
我正在做一个显示背景计算结果的GUI。 但在此之前,我想testing更改数据集。 这是我的代码: DefaultXYDataset dataset = new DefaultXYDataset(); @Override public void run() { // TODO Auto-generated method stub for (int i = 0; i < periods; i++) { series[0][i] = (double) i; series[1][i] = 0; } dataset.addSeries("Series0", series); for (int it = 0; it < 10; it++) { series[1][random.nextInt(periods)] = random.nextInt(100) / 2; double[][] d […]
我正在构build一个JSF应用程序。 我定义了GUI,并使用selectselect语句来查询数据库。 现在我必须做insert语句,但我不知道如何读取像<h:inputText>这样的JSFinput组件的value ,并将它发送给执行插入的bean。 应该通过faces-config.xml来映射<h:inputText>值,所以我可以在我的Java代码中使用它。
我正在使用NetBeans GUI编辑器创build一个应用程序,在这个应用程序中我想要一个JSplitPane ,它的顶层组件是JScrollPane一个Canvas ,底层组件是一个JTextArea ,或类似的东西。 当我向下拉分隔器,从而增加顶部组件的大小时,一切似乎都调整得很好。 当我试图向上推分隔线时,问题就出现了:分隔线似乎在Canvas下面(也可能在JScrollPane下面)。 我已经尝试了JScrollPane和Canvas的首选/最小/最大尺寸的各种组合,但似乎没有任何工作。 这是Netbeans生成的代码的一部分,可能与手头的问题有关: jSplitPane1 = new javax.swing.JSplitPane(); jScrollPane1 = new javax.swing.JScrollPane(); canvas1 = new java.awt.Canvas(); jTextField1 = new javax.swing.JTextField(); jSplitPane1.setDividerLocation(300); jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); jScrollPane1.setViewportView(canvas1); jSplitPane1.setTopComponent(jScrollPane1); jTextField1.setText("jTextField1"); jSplitPane1.setRightComponent(jTextField1); 由于这是我的第一个问题,我不允许在问题中embedded图片,因此我只会发布链接: 红色箭头表示分隔器的位置。 预先感谢您的时间。
我从这里得到了代码。 class Timer { public: Timer(); }; class TimeKeeper { public: TimeKeeper(const Timer& t); int get_time() { return 1; } }; int main() { TimeKeeper time_keeper(Timer()); return time_keeper.get_time(); } 从它的外观来看,它应该得到编译错误,由于行: TimeKeeper time_keeper(Timer()); 但只有在return time_keeper.get_time(); 存在。 为什么这一行甚至是重要的,编译器会在time_keeper(Timer() )构造上time_keeper(Timer() )歧义。
l = range(100) for i in l: print i, print l.pop(0), print l.pop(0) 上面的python代码给出了与预期完全不同的输出。 我想循环的项目,以便我可以跳过一个项目,而循环。 请解释。
我想让A B和C在中间alignment。 我怎样才能让D完全走向正确的? 之前: 后: 这样做的最佳做法是什么? ul { padding: 0; margin: 0; display: flex; flex-direction: row; justify-content: center; align-items: center; } li { display: flex; margin: 1px; padding: 5px; background: #aaa; } li:last-child { background: #ddd; /* magic to throw to the right*/ } <ul> <li>A</li> <li>B</li> <li>C</li> <li>D</li> </ul> https://jsfiddle.net/z44p7bsx/
我正在玩一个我想绑定到所有链接的函数。 目前该function会在页面加载时触发,而不是点击链接。 这是我的代码。 (如果你需要的话,我可以在函数showDiv()过去showDiv()你能告诉我在这里做错了什么吗? $(document).ready(function(){ $('a.test').bind("click", showDiv()); }); 谢谢