在 Python 方法中,我希望有一个局部变量,其值在方法调用之间保持不变。
这个问题展示了如何在函数内声明此类“静态变量”(C++ 术语)。我尝试在实例方法中执行相同的操作,但失败了。
这是一个重现该问题的最小工作示例。您可以将其复制粘贴到解释器中。
class SomeClass(object):
def some_method(self):
if not hasattr(SomeClass.some_method, 'some_static_var'):
SomeClass.some_method.some_static_var = 1 # breaks here
for i in range(3):
print SomeClass.some_method.some_static_var
SomeClass.some_method.some_static_var += 1
if __name__ == '__main__':
some_instance = SomeClass()
some_instance.some_method()
Run Code Online (Sandbox Code Playgroud)
在标有“#在此中断”的行上,我得到:
AttributeError: 'instancemethod' object has no attribute 'some_static_var'
我意识到有一个简单的解决方法,我可以在其中创建 的some_static_var成员变量SomeClass。SomeClass然而,该变量在方法之外确实没有用,所以如果可以的话,我更希望避免它弄乱命名空间。
我在 PyCharm 项目中有以下 Python 代码:
class Category:
text: str
a = Category()
a.text = 1.5454654 # where is the warning?
Run Code Online (Sandbox Code Playgroud)
当我尝试设置错误类型的属性时,编辑器应该显示警告。看看下面的设置:
我有这个代码:
// my.h
#ifndef MY_HEADER
#define MY_HEADER
int create_uid();
#endif
Run Code Online (Sandbox Code Playgroud)
// my.cpp
#include "my.h"
static int _next_uid = 0;
int create_uid()
{
return _next_uid++;
}
Run Code Online (Sandbox Code Playgroud)
我想内联create_uid(),同时保持_next_uid变量对程序全局,以便变量是唯一的。
我的问题是:
inlinerequire 语句_next_uid在编译单元之外是否可见?注意:这似乎并没有清楚地回答这些问题。
我正在开发一个新的应用程序,Asp.Net MVC project这次是为了更好地控制应用程序的静态内容,我计划将所有内容作为可重用属性存储在readonly static variables. 这些值在应用程序的整个生命周期中不会改变。
使用示例:
我创建了一个类,将所有消息保存在静态变量中,这样如果我想更改默认保存消息,我可以从这里更改它,而无需更改项目中的每个事件。这还包括验证消息。(数量可能会快速增长,具体取决于项目的规模)
其他用途:存储所有与应用程序相关的属性,例如版本、标题、密钥等等。我还计划存储按钮文本和其他 UI 控件相关的属性,以便可以轻松自定义它们,例如我不知道可能是 CSS 类。
更不用说,除了上述之外,我还有许多静态类,例如数据访问助手和带有一些静态方法的实用函数。
示例类:
public static class Messages
{
public static class Response
{
public readonly static string SUCCESS = "Process completed successfully";
public readonly static string FAILED = "Process failed";
public readonly static string ERROR = "Some error occured";
public readonly static string OPRNOTPERFORMED = "Operation aborted/failed for some unknown reason. Please contact your administrator";
//LOGIN
public readonly static string USERNOTFOUND = "Invalid username …Run Code Online (Sandbox Code Playgroud) asp.net asp.net-mvc web-applications static-variables readonly-variable
如果我声明在IIS中托管的ASP.NET应用程序中实例化的类型中的静态字段是IIS使用的所有工作线程使用的相同变量(即相同的内存位置),那么会导致并发问题?
我想知道在两个java类之间隐藏字段是什么意思,以及在结果输出方面运行代码时它意味着什么?
我有一个带有a protected static boolean field = false和子类的抽象类,它有一个具有相同名称但不是静态的布尔字段并设置为true.
如果我有这个代码:
Superclass d = new subclass();
Run Code Online (Sandbox Code Playgroud)
超类中的布尔字段和子类中的布尔字段的值是多少?子类字段是否保留为false上面的赋值后?
非常感谢
java field instance-variables static-variables member-hiding
我将类名Car存储为常量中的静态变量.我想用这个常量来调用这个函数a.一种选择是使用中间变量$tmp.然后我可以打电话$tmp::a().有没有办法在一个声明中这样做?我的尝试如下.
class Car{
public static function a(){
return 'hi';
}
}
class Constants{
public static $use='Car';
}
$tmp=Constants::$use;
echo(${Constants::$use}::a());
Run Code Online (Sandbox Code Playgroud)
输出如下
PHP Notice: Undefined variable: Car in /home/mU9w5e/prog.php on line 15
PHP Fatal error: Class name must be a valid object or a string in /home/mU9w5e/prog.php on line 15
Run Code Online (Sandbox Code Playgroud) 我在PHP中的不同线程之间共享静态变量时遇到问题.简单来说,我想1.在一个线程中编写一个静态变量2.在其他线程中读取它并执行所需的过程并清理它.为了测试上面的要求,我在下面写了PHP脚本.
<?php
class ThreadDemo1 extends Thread
{
private $mode; //to run 2 threads in different modes
private static $test; //Static variable shared between threads
//Instance is created with different mode
function __construct($mode) {
$this->mode = $mode;
}
//Set the static variable using mode 'w'
function w_mode() {
echo 'entered mode w_mode() funcion';
echo "<br />";
//Set shared variable to 0 from initial 100
self::$test = 100;
echo "Value of static variable : ".self::$test;
echo "<br />";
echo "<br />";
//sleep …Run Code Online (Sandbox Code Playgroud) 将指向静态结构的指针传递给函数是否安全?
我有这样的事情:
mymodule.c:
static MYEVENT_STRUC_T event;
uint_32 _myRtos_set_event(MYEVENT_STRUCT_T* event_ptr, uint_32 mask);
uint_32 mymodule_set_event(uint_32 event_mask){
/* Kernel function */
/* Defined outside mymodule.c,*/
/* Is it safe to call it with &event? */
return _myRtos_set_event(&event, event_mask);
}
Run Code Online (Sandbox Code Playgroud) 我有以下模板元编程实现的阶乘:
#include <iostream>
template <int n> struct factorial{
static const int res = n*factorial<n-1>::res;
};
template <> struct factorial<0>{
static const int res = 1;
};
int main(){
std::cout << factorial<5>::res << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,此代码成功编译并输出120.但是,出于纯粹自我享受的原因,我想改为使其不编译,而是在编译器的错误消息中显示120.
是否有一个简单的语法错误我可以刻意进入我的代码,使其无法编译,但仍然在编译器错误消息中打印5 !,即120的值?
我预计答案可能依赖于编译器; 我目前正在使用Xcode Mac OSX附带的g ++,其中iirc是clang的前端.
c++ compiler-errors static-variables template-meta-programming
static-variables ×10
asp.net ×2
c++ ×2
php ×2
python ×2
asp.net-mvc ×1
c ×1
field ×1
iis ×1
java ×1
methods ×1
pycharm ×1
static ×1
typechecking ×1