在Python中,我想直接从Parent类的实例构造一个Child类的实例.例如:
A = Parent(x, y, z)
B = Child(A)
Run Code Online (Sandbox Code Playgroud)
这是我认为可行的黑客行为:
class Parent(object):
def __init__(self, x, y, z):
print "INITILIZING PARENT"
self.x = x
self.y = y
self.z = z
class Child(Parent):
def __new__(cls, *args, **kwds):
print "NEW'ING CHILD"
if len(args) == 1 and str(type(args[0])) == "<class '__main__.Parent'>":
new_args = []
new_args.extend([args[0].x, args[0].y, args[0].z])
print "HIJACKING"
return Child(*new_args)
print "RETURNING FROM NEW IN CHILD"
return object.__new__(cls, *args, **kwds)
Run Code Online (Sandbox Code Playgroud)
但是当我跑步的时候
B = Child(A)
Run Code Online (Sandbox Code Playgroud)
我明白了:
NEW'ING CHILD
HIJACKING
NEW'ING CHILD
RETURNING FROM NEW …Run Code Online (Sandbox Code Playgroud) 我有一个方法接受一个可以是几种类型的参数,并且必须根据类型做一件事,但是如果我检查所述参数的类型,我不会得到'真实'类型,我总是得到<type 'instance'>,这就是我的比较搞乱了.
我有类似的东西:
from classes import Class1
from classes import Class2
# Both classes are declared in the same file.
# I don't know if that can be a problem #
# ... #
def foo(parameter)
if (type(parameter) == type(Class1()):
# ... #
elif (type(parameter) == type(Class2()):
# ... #
Run Code Online (Sandbox Code Playgroud)
而作为type(parameter)回报<type 'instance'>,并type(Class1())是<type 'instance'>为好,事实证明,即使参数为Class2中的一个实例,它是进入第一比较...
顺便说一句,str(parameter.__class__)正确显示classes.Class1.我想我总是可以使用它,但我想了解发生了什么...我已经做了十分之一的比较,所有这些都正常工作......
谢谢!!:)
假设我有一个有100个孩子的基类:
class Base {
virtual void feed();
...
};
class Child1 : public Base {
void feed(); //specific procedure for feeding Child1
...
};
...
class Child100 : public Base {
void feed(); //specific procedure for feeding Child100
...
};
Run Code Online (Sandbox Code Playgroud)
在运行时,我想读取一个文件,其中包含要创建和提供的子项.假设我已经读过文件,字符串"names"的向量包含子类的名称(即Child1,Child4,Child99).现在,我将遍历这些字符串,创建特定子项的实例,并使用其特定的提供过程来提供它:
vector<Base *> children;
for (vector<string>::iterator it = names.begin(); it != names.end(); ++it) {
Base * child = convert_string_to_instance(*it)
child->feed()
children.push_back(child);
}
Run Code Online (Sandbox Code Playgroud)
我如何创建函数convert_string_to_instance(),这样如果它接受字符串"Child1"它返回一个"new Child1",如果字符串参数是"Child4"它返回一个"new Child4",等等
<class C *> convert_string_to_instance(string inName) {
// magic happens
return new C; // C = …Run Code Online (Sandbox Code Playgroud) 我有一个名为的数据类型Praat.我想Praat成为一个实例,Eq以便两个Praats相等,当且仅当mx它们相等时.怎么做到这一点?
-- data type
data Praat t = Praat [k] [(k,k,k,k)]
-- praat gives the maximum frequency
Praat t -> Int
mx (Praat [] _) = 0
mx (Praat (e:es) pt) = ...........
Run Code Online (Sandbox Code Playgroud)
这就是我试图定义实例但它无法正常工作的方式.
-- I want to make Praat instance of Eq so that two Praat are equal
-- when their respective `mx` are equal
instance Eq Praat where
mx :: (Praat k)->Int
(mx k) == (mx k) = …Run Code Online (Sandbox Code Playgroud) 我将在SPARQL中获取C的C类和子类(直接或间接)的所有实例.
我可以用这种方式得到C的所有直接子类:
SELECT ?entity
WHERE {
?subclass rdfs:subClassOf :C .
?entity rdf:type ?subclass .
}
Run Code Online (Sandbox Code Playgroud)
但我不能得到间接子类的实例,也不能得到任何C的实例.
据我所知(我已经预先计算了它们)所有子类(C的直接和间接),我可以构建一个动态查询,是否可以构建如下的查询?
SELECT ?entity
WHERE {
?entity rdf:type in <list>.
}
Run Code Online (Sandbox Code Playgroud)
谢谢大家.
编辑:
我刚刚解决了它,即使是以一种不优雅的方式.
SELECT ?entity
WHERE {
{ ?entity rdf:type :C }
UNION { ?entity rdf:type :SubClass1 }
UNION { ?entity rdf:type :SubClass2 }
UNION { ?entity rdf:type :SubClass3 }
}
Run Code Online (Sandbox Code Playgroud) 我需要将以下数据类型作为以下实例Show:
data Tree a b = Branch b (Tree a b) (Tree a b) | Leaf a
Run Code Online (Sandbox Code Playgroud)
我对此很新,但首先,我将此声明解释为
"我们创建了一个名为Tree的新类型,它使用类型a和b进行参数化.树可以是两个东西之一:一个分支,它包含一个b类型的数据,另外两个树,或一个叶子,它持有类型为a的数据项."
现在,我需要做一个很好地"展示"它(嵌套分支等)的方法,而不使用deriving.到目前为止,我只是在一个模块Main中编写函数,并在解释器窗口中加载/播放它们,所以我之前并没有实际使用构造函数等.尽管如此,我想我可以从我的文件中声明树数据类型开始,如问题开头所示,然后从那里开始.
当我用"Show"搞砸了没有太大的成功时,我想也许我需要在尝试使用整个树之前定义树的一个小组件以及如何首先"显示"它:
data Leaf a = Leaf a
instance Show (Leaf a) where
show (Leaf a) = ???
Run Code Online (Sandbox Code Playgroud)
我在???中尝试了很多东西?现货,比如"a",只是一个单独的,putStrLn等,但当我说出类似的东西时,没有一个打印出来的值a
>show (Leaf 3)
Run Code Online (Sandbox Code Playgroud)
事实上,我在很多情况下遇到过这种情况,这可能意味着我找不到合适的东西:
Ambiguous occurrence `show'
It could refer to either `Main.show', defined at a2.hs:125:1
or `Prelude.show',
imported from `Prelude' at a2.hs:2:8-11
(and originally defined in `GHC.Show')
Run Code Online (Sandbox Code Playgroud)
...我通过调用"Main.show"来解决这个问题,当然这不起作用.
我想问题是,我在哪里可以使用所有这些...或者只是,"我如何修复Leaf"Show"实用程序,以便我可以弄清楚如何扩展它?" (假设我必须先定义它......)
php 5.3+
很抱歉这个问题很长,但我想完全了解这一点.
我知道我不能从静态方法中调用非静态相同类方法,而不将类实例化为对象.
class Person
{
private $people_array;
function data_all_get()
{ // touch database, return array of people
$this->people_array = // etc dbquery results
}
static function showPeople()
{ // call class method
$people_data = $this->data_all_get();
// Fatal error: Using $this when not in object context
}
} // end class Person
Run Code Online (Sandbox Code Playgroud)
从搜索SO,我发现了一些有趣的方法,但想知道每种方法如何影响代码环境.
我的问题如下:
我可以将类实例化为静态方法中的对象,以获得对非静态方法的访问
static function showPeople()
{ // instantiate as object
$person = New Person();
// call class method
$people_data = $this->data_all_get();
}
Run Code Online (Sandbox Code Playgroud)
Q1 - 这会导致什么问题? 在我的情况下,该类没有构造函数,因此该实例不会影响其他类方法或变量.在脚本执行期间,这个新对象会占用内存中的一小块空间吗?似乎不太糟糕...... …
我有一个小班,如下:
class Gender(object):
MALE = 'M'
FEMALE = 'F'
Run Code Online (Sandbox Code Playgroud)
我有一个参数变量,只能是M或F.为了确保它只是那个,我做以下事情:
>>> parameter = 'M'
>>> if parameter not in (Gender.MALE, Gender.FEMALE)
... print "Invalid parameter"
...
Invalid parameter
>>>
Run Code Online (Sandbox Code Playgroud)
现在我有一个包含美国所有州的课程如下:
class States(object):
ALABAMA = 'AL'
ALASKA = 'AK'
ARIZONA = 'AZ'
ARKANSAS = 'AR'
CALIFORNIA = 'CA'
COLORADO = 'CO'
CONNECTICUT = 'CT'
DELAWARE = 'DE'
DISTRICTOFCOLUMBIA = 'DC'
....
....
Run Code Online (Sandbox Code Playgroud)
就像上面的例子一样,我的参数现在是AL.但是,由于美国有50个状态,我实际上不能使用像我上面使用的50个变量的元组.有更好的方法吗?我确实读过关于isinstance的内容,但它没有给我预期的结果.
我现在第二次遇到这个问题了,我想知道是否有任何解决方案.我正在Google App Engine上运行一个依赖于通过HTTP JSON RPC与网站进行频繁通信的应用程序.似乎GAE倾向于在日志中随机显示这样的消息:
"此请求导致您的应用程序启动了一个新进程,从而导致您的应用程序代码首次加载.因此,此请求可能需要更长的时间并且使用的CPU比典型的应用程序请求更多."
并重置存储在RAM中的所有变量而不发出警告 无论我再次设置变量多少次或将更新的代码上传到GAE,相同的过程都会反复发生,尽管增加应用版本号似乎可以解决问题.
如何获取有关此行为的更多信息,如何避免这种行为并防止我的Golang应用程序在Google App Engine上丢失?
编辑:
存储在RAM中的变量是字符串,字节,bool和指针的小类.没有太复杂或太大.
谷歌应用引擎似乎在重大使用的几秒钟内"开始一个新的过程",这应该不足以让应用程序因未被使用而关闭.应用程序上传到GAE,其变量集和创建的新进程之间的时间跨度不到一分钟.
有没有人在实例之间共享webpack的缓存选项的例子?在文档中它说:
"你可以传递一个对象来启用它,让webpack使用传递的对象作为缓存.这样你就可以在多个编译器调用之间共享缓存对象.注意:不要在具有不同选项的调用之间共享缓存."
http://webpack.github.io/docs/configuration.html#cache
但目前尚不清楚实施情况.有帮助吗?谢谢