require.js陈述define([requiremens], object)以最佳方式在模块内定义对象的方式.
因此,每个页面或其他js文件都将require()调用和接收模块作为参数.
这很好用,每个函数/模块都有自己的命名空间.
问题是我有:
// AJAX/Requests.js
define(['UI/Message'],function(Message){
var Requests={
checkResponse:function(response){
//1==ok
//0==error
//2==good message
//3==good message, but still stop
if(response.status==1){
return true;
}
else if(response.status==2){
Message.good(response.message);
return true;
}
else if(response.status==3){
Message.good(response.message);
return false;
}
else{
Message.bad(response.message);
return false;
}
}
};
return Requests;
});
Run Code Online (Sandbox Code Playgroud)
现在,UI/Message以相同的方式定义,并返回对象.
但是当我用请求编辑文件时,我无法通过代码导航,所以如果我想编辑Message对象,唯一的方法就是自己打开文件并找到我需要的函数,而不是让IDE跳到那里为了我.
是专门针对pycharm还是针对require.js的一些解决方法来解决这个问题?当你有很多代码时,导航它就变得一团糟,这就是我首先使用IDE的原因!
更糟糕的是:编辑永远不知道对象有什么功能!
我可以看到的一种可能的解决方案是不使用封闭的命名空间,并在define()调用之前声明全局变量,但在这种情况下,所有对象都应该像UI_Message,AJAX_Requests一样被调用.为了确定,我在两个不同的位置没有一些消息....
我不确定,如果require.js优化器将正确使用它.Require.js文档说明非常清楚,远离全局变量.
:rtype:指定这是返回对象的类型
因此,当我obj在下面的代码片段中创建对象时,我收到来自IDE的警告cls is not callable,因为IDE期望,这cls是object类型的SomeAbstractClass,我想要SomeAbstractClass自己
IDE是对的,因为这是默认行为.但是我如何指定,我正在返回课程,而不是课程的实例?
指定type而不是SomeAbstractClass帮助,但不是解决方案,因为没有进一步的内省可用.
def class_selector(data):
"""
:rtype: SomeAbstractClass
:return: Return some class based on given parameters
"""
return get_from.get(data.name)
cls = class_selector(data)
obj = cls(data.more_data)
Run Code Online (Sandbox Code Playgroud)
同时我通过""":type: SomeAbstractClass"""在创建对象后添加来解决这个问题 ,但是这并没有取消警告并且它是脏的解决方案.
顺便说一句,谈论python 2.x.
我有一些对象将始终存储在内存中,并且会有数千个实例,因此有效使用内存非常重要.
这个对象将使用一些像这样的字典:
{
'text':doSomething,
'string':doAnotherThing,
'int':doSomethingCrazy
}
Run Code Online (Sandbox Code Playgroud)
当然我可以把它放在类之外,在模块级别上,所以它肯定会只存储在内存中一次,但我更喜欢把它们放在一起,所以如果它只在那个类中使用它看起来更好,如果它在课堂上.
问题是,如果我将dict放入类定义中,它是否只存储在内存中一次?
class MyClass(object):
thatDict={}
Run Code Online (Sandbox Code Playgroud)
或者如果我把它放在函数定义中,它将只存储在内存中一次?
class MyClass(object):
def someFunc():
thatDict={}
Run Code Online (Sandbox Code Playgroud)