假设你有这样的东西:
class intlist:
def __init__(self,l = []):
self.l = l
def add(self,a):
self.l.append(a)
def appender(a):
obj = intlist()
obj.add(a)
print obj.l
if __name__ == "__main__":
for i in range(5):
appender(i)
Run Code Online (Sandbox Code Playgroud)
函数创建一个intlist实例,并在该新实例上调用该方法附加在实例属性l上.
为什么这段代码的输出是:
[0]
[0,1]
[0,1,2]
[0,1,2,3]
[0,1,2,3,4]
?如果我切换
obj = intlist()
Run Code Online (Sandbox Code Playgroud)
同
obj = intlist(l=[])
Run Code Online (Sandbox Code Playgroud)
我得到了所需的输出
[0]
[1]
[2]
[3]
[4]
为什么会这样?
谢谢
就我而言,实现者应该能够“更新”一个对象。
//creating an instance (follows the active record pattern)
SameClass myObject = SameClass.find(123,params);
//myObject gets replaced by the output of the web api inside, but it feels like an update for the implementator
myObject.update("ask the web api to paint it black");
Run Code Online (Sandbox Code Playgroud)
但是,在类内部,我还没有弄清楚如何立即替换所有属性。这种方法行不通,但是也许还有其他机会可以解决它:
public void update(String newParams) {
//Can't replace "this" (that call returns an instance of "SameClass")
this = ConnectionFramework.getForObject(SameClass.class,"some url",newParams);
}
Run Code Online (Sandbox Code Playgroud)
实际上,“ ConnectionFramework”是适用于Android的Spring RestTemplate。未简化的版本是:
public void update(HashMap<String,String> params) {
SameClassResponse response = restTemplate.getForObject(ENDPOINT+"/{id}.json",SameClassResponse.class, params);
this = response.getSameClass(); …Run Code Online (Sandbox Code Playgroud) 我写了perl类,但我不知道如何在我的$this变量中有一个数组或一个哈希?
我有一个pack.pm:
#!/usr/bin/perl -w
use strict;
use Parallel::ForkManager;
package Pack;
our $cgi = new CGI;
sub new {
my ($classe, $nom, $nbports, $gio) = @_;
my $this = {
"nom" => $nom,
"nbports" => $nbports,
"gio" => $gio
};
bless($this, $classe);
return $this;
}
...
1;
Run Code Online (Sandbox Code Playgroud)
我想有一个@tab,我可以通过访问$this->tab,但我不想在arg中给它实例.
它在Perl中如何工作?
谢谢.
我试图__callStatic从其子类的成员调用静态魔术函数().问题是,它转向非静态__call.
<?php
ini_set("display_errors", true);
class a
{
function __call($method, $params)
{
echo "instance";
}
static function __callStatic($method, $params)
{
echo "static";
}
}
class b extends a
{
function foo()
{
echo static::bar();
// === echo self::bar();
// === echo a::bar();
// === echo b::bar();
}
}
$b = new b();
echo phpversion()."<br />";
$b->foo();
?>
Run Code Online (Sandbox Code Playgroud)
输出:
5.3.6
instance
Run Code Online (Sandbox Code Playgroud)
如何让它显示"静态"?
如何创建商店的唯一实例并将其分配给视图(如果需要,我可以创建独特的视图和/或控制器)?
一个简单的用例 - 我想打开多个网格(相同类型),每个网格包含一个商店中的记录列表.每个网格都需要拥有自己的商店实例,因为它可以拥有自己的记录列表,它自己的过滤等等.
我尝试了这个,但它不起作用,我的网格不绘制:
var theView = Ext.create('App.view.encounter.List');
theView.title = 'WORC Encounters';
var theStore=Ext.create('App.store.Encounters');
theView.store=theStore;
tabhost.add({title:'WORC',items:theView});
var theView = Ext.create('App.view.encounter.List');
theView.title = 'NC Encounters';
var theStore2=Ext.create('App.store.Encounters');
theView.store=theStore2;
tabhost.add({title:'NC',items:theView});
Run Code Online (Sandbox Code Playgroud) 我对访问者模式有点不友好,但我有一个需要访问者实现的任务(如果我想避免"instanceof"检查).
我有一个类,它是几个gwt元素的包装:Label,Panel,Widget(可以是复选框,列表框,文本框等).我使用数组作为UI的相似部分的集合.例如Label +复选框,Label +文本框; 标签+按钮等
一些元素以不同的方式构造(从例如Panel派生的另一个类的一部分).因此,我有两个相同的构造函数,但在一个地方使用重载方法.我可以合并这些构造函数并使用上面提到的方法中的"instanceof"检查元素.但我不喜欢这个解决方案,并希望使用访问者模式替换它.说实话,我不知道该怎么做,希望对你有所帮助.
这是我的一个例子:
public class MyWidgets {
private String stringLabel;
private Widget widget;
private Panel panel;
public MyWidgets(String stringLabel, Widget widget) {
this.stringLabel = stringLabel;
this.widget = widget;
initPanel(stringLabel, widget);
}
public MyWidgets(ConstructedClass cs, Widget widget) {
this.widget = widget;
initPanel(cs, widget);
}
private initPanel(String label, Widget widget) {
panel = SomeStaticUtilityClass.initPanel(new Label(label), widget);
}
private initPanel(ConstructedClass cs, Widget widget) {
panel = SomeStaticUtilityClass(cs, widget);
}
}
Run Code Online (Sandbox Code Playgroud)
像这样的东西(我试图让它最大化抽象,实际上它更难).
所以我有一个使用"instanceof"的解决方案:
private initPanel(Object object, Widget widget) {
if(object …Run Code Online (Sandbox Code Playgroud) 我一直在为使用XNA构建的游戏进行大量关于C#优化的研究,我仍然不太清楚局部变量是否是实例变量,在不断更新和使用时会提供更好的性能.
根据http://www.dotnetperls.com/optimization,您应该避免参数和局部变量,这意味着实例变量是性能方面的最佳选择.
但不久之前,我在另一篇StackOverflow帖子(我似乎无法找到它的位置)上读到,局部变量存储在访问速度快得多的内存中,并且每次设置实例变量时,在分配新值之前,必须将先前的值擦除为繁琐的额外步骤.
我知道在设计方面,它可能会破坏封装以在这种情况下使用实例变量,但我对性能非常好奇.目前在我的游戏中,我将局部变量传递给一个类中的7个方法中的3个,但我可以轻松地将变量提升为实例变量,并且能够完全避免参数传递和局部变量.
哪个更好?
所以,我想要做的是,使用fxml创建一个自定义元素,然后将该元素的几个实例添加到容器中,如GridPane."new"运算符对我不起作用,因为我想使用@fxml注释器来访问该元素.克隆会很好,但它不起作用.当在for()contruct中使用添加许多元素时,FXMLLoader非常慢.如果我可以写一个fxml parentnode的引用,它可以从控制器调用,那将是完美的.
对不起...这里伪...
public class Controller implements Initializable {
@FXML
private VBox stack;
@FXML
private Button button;
@FXML
private void Change(KeyEvent event) throws IOException {
for (int i=0; i<10; i++){
stack.getChildren().add(button);
}
}
}
Run Code Online (Sandbox Code Playgroud)
将THE按钮添加到VBox是没有问题的.但是在for-contruct中(添加多于一个按钮)它失败了.我可以在for构造中使用new运算符,但我想知道,如果这是唯一的可能性.我认为必须有另一种方式,例如使用@FXML注释器"获取"按钮然后复制它.
我已经使用该main方法创建了以下类,该方法创建了新的实例Application和实例ApplicationModel,ApplicationView并ApplicationController为此特定Application.
public class Application
{
// Variables
private ApplicationSettings settings;
private ApplicationModel model;
private ApplicationView view;
private ApplicationController controller;
// Constructor
public Application()
{
settings = new ApplicationSettings();
model = new ApplicationModel();
view = new ApplicationView(model);
controller = new ApplicationController();
}
// Main method
public static void main(String[] args)
{
Application application = new Application();
}
// Getters for settings, model, view, controller for instance of Application
} …Run Code Online (Sandbox Code Playgroud) 鉴于a Class<?> superType和a Object subInstance,它们之间有什么区别
superType.isInstance(subInstance)
Run Code Online (Sandbox Code Playgroud)
和
superType.isAssignableFrom(subInstance.getClass())
Run Code Online (Sandbox Code Playgroud)
(如果有的话)?