我有一个类在他们的函数上有一个沉闷的重复模式,我想把这个模式变成一个装饰器.但问题是这个装饰器必须访问当前实例的一些属性,所以我想把它变成这个类中的方法.我遇到了一些问题.
所以,这与我想要的类似:
class DullRepetitiveClass:
def __init__(self, nicevariable):
self.nicevariable = nicevariable
def mydecorator(self, myfunction):
def call(*args, **kwargs):
print "Hi! The value of nicevariable is %s"%(self.nicevariable,)
return myfunction(*args, **kwargs)
return call
@mydecorator #Here, comment (1) below.
def somemethod(self, x):
return x + 1
Run Code Online (Sandbox Code Playgroud)
(1)这是问题所在.我想用这个DullRepetitiveClass.mydecorator
方法来装饰somemethod
方法.但我不知道如何使用当前实例中的方法作为装饰器.
有一个简单的方法吗?
编辑:好的,答案很明显.正如Sven所说,装饰器本身只是改变了方法.该方法本身应该处理与实例有关的所有事情:
def mydecorator(method):
def call(self, *args, **kwargs):
print "Hi! The value of nicevariable is %s"%(self.nicevariable,)
return method(self, *args, **kwargs)
return call
class DullRepetitiveClass:
def __init__(self, nicevariable):
self.nicevariable = nicevariable
@mydecorator
def somemethod(self, x): …
Run Code Online (Sandbox Code Playgroud) 我有一个XmlSerializer
在其Read/WriteXml
方法中使用的类.目前是Serializer private readonly
.
public class Foo : IXmlSerializable
{
private Bar _bar = new Bar();
private readonly XmlSerializer serBar = new XmlSerializer (typeof (Bar));
public void WriteXml (XmlWriter writer)
{
serBar.Serialize (writer, Bar);
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
我正在考虑private static
改为使用Serializer ,因此所有Foos之间共享一个实例.这是个好主意,还是有可能存在问题?
请考虑以下代码:
module ModName
def aux
puts 'aux'
end
end
Run Code Online (Sandbox Code Playgroud)
如果我们替换module
用class
,我们可以做到以下几点:
ModName.new.aux
Run Code Online (Sandbox Code Playgroud)
但是,模块不能被实例化.有没有办法aux
在模块上调用方法?
我想知道哪个会更好,在EC2上托管一个具有许多微实例的站点,或者更少的大型实例,例如m1.large.所有这些都将作为负载平衡器位于一个或几个更大的实例后面.我会说出我的理解是什么,如果我错了,任何知道更好的人都可以添加或纠正我
选择微实例的主要原因是成本.单个微型实例平均每小时0.02美元可以提供0.35ECU,而一个小型实例将以0.085美元提供1ECU.如果你进行$/ECU /小时的数学计算,微型实例的成本为0.057美元/ ECU /小时,而小型实例则为0.085美元/ ECU /小时.因此,对于相同的平均计算能力,选择100个微实例将比35个小实例便宜.
微实例的主要问题是性能波动较大,但是当你有很多实例时,我不确定这是不是一个问题.
那么有没有人有这样的设置和看到好处和缺点的经验?请告诉我,因为我正在尝试选择哪条路,谢谢!
PS:关于这个主题的文章,http://huanliu.wordpress.com/2010/09/10/amazon-ec2-micro-instances-deeper-dive/
我正在尝试验证实例属性和类属性之间的区别,如2012年11月1日的Python教程版本2.7.3,第9章:类,最后一行(源代码)所示:
实例对象的有效方法名称取决于其类.根据定义,作为函数对象的类的所有属性都定义其实例的相应方法.所以在我们的例子中,xf是一个有效的方法引用,因为MyClass.f是一个函数,但是xi不是,因为MyClass.i不是.但是xf与MyClass.f不同 - 它是一个方法对象,而不是一个函数对象.
我有这个:
class MyClass:
"""A simple example class"""
i = 12345
def f():
return 'hello world'
Run Code Online (Sandbox Code Playgroud)
然后我这样做:
>>> x = MyClass()
>>> x.f
<bound method MyClass.f of <__main__.MyClass instance at 0x02BB8968>>
>>> MyClass.f
<unbound method MyClass.f>
>>> type(MyClass.f)
<type 'instancemethod'>
>>> type(x.f)
<type 'instancemethod'>
Run Code Online (Sandbox Code Playgroud)
需要注意的是这两种类型x.f
并MyClass.f
为instancemethod.类型没有区别,但教程另有说法.有人可以澄清一下吗?
我想使用orm在SQLAlchemy中复制模型实例(行).我的第一个想法是这样做:
i = session.query(Model)
session.expunge(i)
old_id = i.id
i.id = None
session.add(i)
session.flush()
print i.id #New ID
Run Code Online (Sandbox Code Playgroud)
然而,显然分离的对象仍然"记住"它具有的id,即使我在分离时将id设置为None.因此,session.flush()尝试执行UPDATE,将主键更改为null.
这是预期的行为吗?如何删除此属性的"内存",并在将重新添加到会话时将其作为新对象处理?一般来说,如何克隆SQLAlchemy模型实例?
我试图访问在模型中的控制器中设置的实例变量.控制器是产品控制器,模型是产品型号.实例变量是另一个名为account的模型的实例.
实例变量是 @current_account
当我运行代码没有任何反应时,我没有收到错误.有谁知道在哪里可以找到关于模型中控制器中设置的访问实例变量的内容?
谢谢
EEF
class MyClass:
def myMethod(self):
pass
myInstance = MyClass()
methodReference = myInstance.myMethod
Run Code Online (Sandbox Code Playgroud)
myInstance
如果您现在只能访问,现在可以获得参考methodReference
吗?
我有一个接受泛型类型的类,我想以equals
一种非笨拙的方式覆盖该方法(即看起来很干净且代码量很少的东西,但对于一般的用例).
现在我有这样的事情:
public class SingularNode<T> {
private T value;
@SuppressWarnings("unchecked")
@Override
public boolean equals(Object other){
if(other instanceof SingularNode<?>){
if(((SingularNode<T>)other).value.equals(value)){
return true;
}
}
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我猜,这是非常有缺陷的 - 我正在SingularNode<T>
对other
对象进行强制转换,这可能会引发错误.
另一件事是 - 当我这样做时,if(other instanceof SingularNode<?>)
我实际上并没有检查正确的事情.我实际上想要检查类型T
而不是类型?
.每当我尝试?
进入时T
,我会得到一些错误:
无法对参数化类型执行instanceof检查
SingularNode<T>
.请改用表单SingularNode<?>
,因为在运行时将删除其他泛型类型信息
我怎么能绕过这个?有办法T.class.isInstance(other);
吗?
我想有一个非常难看的黑客解决方案是这样的:
@SuppressWarnings("unchecked")
public boolean isEqualTo(Class<?> c, Object obj){
if(c.isInstance(obj) && c.isInstance(this)){
if(((SingularNode<T>)obj).value.equals(value)){
return true;
}
}
return …
Run Code Online (Sandbox Code Playgroud) 我有一个字符串,其中包含类的名称(这来自一个json文件).这个字符串告诉我的Template Class哪个布局/模板用于数据(也在json中).问题是我的布局没有显示.
Home.jsx:
//a template or layout.
var Home = React.createClass({
render () {
return (
<div>Home layout</div>
)
}
});
Run Code Online (Sandbox Code Playgroud)
Template.jsx:
var Template = React.createClass({
render: function() {
var Tag = this.props.template; //this is the name of the class eg. 'Home'
return (
<Tag />
);
}
});
Run Code Online (Sandbox Code Playgroud)
我没有得到任何错误,但我也没有看到布局/ Home Class.我检查了props.template,这会记录正确的信息.此外,我可以在DOM中看到home元素.但它看起来像这样:
<div id='template-holder>
<home></home>
</div>
Run Code Online (Sandbox Code Playgroud)
如果我将以下行更改为:
var Tag = Home;
//this works but it's not dynamic!
Run Code Online (Sandbox Code Playgroud)
任何想法,我如何解决这个问题?我确定它要么是简单的修复,要么是我做了一些愚蠢的事情.帮助将不胜感激.如果已经有人问过这个道歉(我找不到).
谢谢,Ewan