标签: class-variables

在 C++ 中使用头文件时如何以及在何处定义类变量

/*
 * CDummy.h
 */
#ifndef CDUMMY_H_
#define CDUMMY_H_

class CDummy {

public:
    CDummy();
    virtual ~CDummy();
};

#endif /* CDUMMY_H_ */
Run Code Online (Sandbox Code Playgroud)

我读过不应在头文件中声明类变量。这是对的吗?所以我在下面的cpp文件中声明它:

/*
 * CDummy.cpp
*/

#include "CDummy.h"

static int counter = 0; //so here is my static counter. is this now private or public? how can i make it public, i cannot introduce a public block here.

CDummy::CDummy() {
  counter++;

}

CDummy::~CDummy() {
    counter--;
}
Run Code Online (Sandbox Code Playgroud)

使用此代码我无法从我的主程序访问类变量....

谢谢

c++ header class-variables

1
推荐指数
1
解决办法
1万
查看次数

Python:self 与 type(self) 以及类变量的正确使用

在 Python 中使用类变量时,可以通过“self”(感谢引用)或“type(self)”(直接)访问和(如果它是可变的)直接操作它,而不可变变量(例如整数)显然得到当您只使用“self”时,会被新的实例对象遮蔽。

那么,在处理 Python 类变量时,总是使用“type(self)”来处理从类方法中引用的类变量是否更可取/Pythonic?

(我知道类变量有时不受欢迎,但是当我使用它们时,我想以一致的方式访问它们(如果它们是不可变类型,则采用一种方式,如果它们是可变的,则采用另一种方式。)

编辑:是的,如果你修改一个不可变的值,你会得到一个新对象。修改可变对象的值的副作用是导致这个问题的原因 - “self”会给你一个引用,你可以用它来改变类变量而不隐藏它,但是如果你给它分配一个新对象,它会隐藏它。使用 classname.classvar 或 type(self).classvar 或 self.__class__ 可确保您始终使用类变量,而不仅仅是隐藏它(尽管子类使这变得复杂,如下所述)。

python class-variables

1
推荐指数
1
解决办法
3270
查看次数

Ruby/Rails 类变量何时初始化?

我目前面临的问题是,我的所有对象都使用具有“相同”初始值的实例变量,而我只读了这个。

def initialize
    @available_ids = read_only_value
end
Run Code Online (Sandbox Code Playgroud)

但棘手的事情来了:这个“read_only_value”是从 API 检索的。为了简单起见,我们假设该值是一个整数数组,并且每月更改一次。

但我不想通过每次创建对象时检索值来拒绝 API。如果我改用类变量怎么办?

class Foo
   @@available_ids = read_only_value
   def initialize
      @available_ids = @@available_ids //weird but let's go with it
   end
end
Run Code Online (Sandbox Code Playgroud)

我认为这将解决 API 垃圾邮件的问题,因为它仅在变量初始化后执行...

但这种情况什么时候发生呢?当我启动 Rails 应用程序时,当我创建第一个对象时?它会更新吗?由于该值每月更改一次,我如何获取更新?

PS:我想最好的选择是将 ids 保存在数据库中,并偶尔或按需检查 ids。

ruby initialization ruby-on-rails class-variables

1
推荐指数
1
解决办法
913
查看次数

如何将嵌套 Python 枚举的成员导出到包含的类中?

我有一个包含字段的 Python 类state。为了定义所有可能的状态,我声明了一个嵌套枚举:

class Foo:
    class State(enum.Enum):
        Unloaded = enum.auto()
        Loaded = enum.auto()
        Processed = enum.auto()

    state: State
Run Code Online (Sandbox Code Playgroud)

不过这样写代码有点麻烦:

if foo.state == Foo.State.Unloaded:
    do_something_with(foo)
    foo.state = Foo.State.Loaded
Run Code Online (Sandbox Code Playgroud)

我想让枚举成员作为Foo(如Foo.UnloadedFoo.LoadedFoo.Processed)的成员直接访问。有没有比手动分配更好的方法?

class Foo:
    class State(enum.Enum):
        Unloaded = enum.auto()
        Loaded = enum.auto()
        Processed = enum.auto()

    Unloaded = State.Unloaded
    Loaded = State.Loaded
    Processed = State.Processed

    state: State
Run Code Online (Sandbox Code Playgroud)

python enums class-variables

1
推荐指数
1
解决办法
55
查看次数

在类函数中设置变量,我可以在哪里使用该变量

如果我有一个类(如下所示)并且在函数中我设置了一个变量(下面:$ this-> example)但是我还没有在类的顶部声明变量(例如var $ example;)我在哪里以及如何用这个变量?我尝试在另一个函数中直接使用它但它没有用(我想我可能犯了一个错误,但它在我在类的顶部声明它之后起作用了)

我在Symfony中已经看到了这个用于设置你可以在视图中使用的变量的内容,而且我在Phorms中也提到了它,并列举了几个例子.

很抱歉,如果这很明显,我只想了解如何使用这些变量,包括获取变量的名称(例如$ this-> example,by name我的意思是"example").

class ExampleClass{
  var $another_var;
  function __construct($data){
    $this->example = $data;
    $this->another_var = $data;
  }

  function exampleFunction(){
    $test = $this->example; //this doesnt work
    $another_test = $this->another_var; //this obviously does
  }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激

问候

卢克

编辑:( 从我对DrColossus的回复)

我希望能够在函数中设置任何变量名,并在另一个函数中获取任何使用name设置的变量.例如在Symfony中我可以在动作类函数中设置$ this-> completly_random_name = $ x,然后在视图中我可以使用$ completly_random_name.symfony无法在父类的顶部设置变量名的所有可能组合.

php class class-variables

0
推荐指数
1
解决办法
1万
查看次数

类问题的attr_accessor

我认为可以在这样的特征类中定义attr_accessor方法:

class IOS
  @@modules_paths = "hello"

  class << self
    attr_accessor :modules_paths
  end

end

puts IOS::modules_paths
Run Code Online (Sandbox Code Playgroud)

但这没有任何回报.

有办法吗?

ruby class-variables

0
推荐指数
1
解决办法
1291
查看次数

我何时在Java中使用类变量与实例变量?

这是我定义的泛型类,我想知道的是当我使用类变量创建更具体的类(例如CAR类)时?我个人对类变量的理解是,在类中声明的类变量的单个副本将使用关键字static声明,并且已从类中实例化的每个对象将包含该类的单个副本变量.

实例变量允许从类创建的类/对象的每个实例每个对象都有一个实例变量的单独副本?

因此,实例变量对于定义类/数据类型的属性很有用,例如House会有一个位置,但现在我何时在House对象中使用类变量?或者换句话说,在设计类时正确使用类对象是什么?

public class InstanceVaribale {
public int id; //Instance Variable: each object of this class will have a seperate copy of this variable that will exist during the life cycle of the object.
static int count = 0; //Class Variable: each object of this class will contain a single copy of this variable which has the same value unless mutated during the lifecycle of the objects.

InstanceVaribale() {
    count++;

}
public static void main(String[] args) {

    InstanceVaribale A …
Run Code Online (Sandbox Code Playgroud)

java oop instance-variables class-variables

0
推荐指数
1
解决办法
3580
查看次数

Django奇怪的行为

我在Django中有一个调用外部库/类的视图.问题是由于某些原因,Django保持缓存来自该类之前调用​​的结果.

请考虑以下简单示例:

Django视图:

from some_path import Demo
def test_view(request):
    demo = Demo()
    result = demo.do_something()
    return render(request, 'test.html',
                            { 'result':result }
                )
Run Code Online (Sandbox Code Playgroud)

演示课:

class Demo():
    result = []

    def do_something(self):
        self.result.append(1)
        self.result.append(2)
        self.result.append(3)
        return self.result
Run Code Online (Sandbox Code Playgroud)

你期望结果是[1,2,3],对吗?错误!

第一次加载页面时,您将获得正确的结果.但是在以下所有请求中它将继续递增:[1,2,3,1,2,3] ...... [1,2,3,1,2,3,1,2,3] ......

所以我的问题很明显 - 这里发生了什么?每次我在Django视图中调用一个类时,我如何收到[1,2,3]?

Django 1.7/MacOS X.

python django class-variables

0
推荐指数
1
解决办法
105
查看次数

如何避免在Ruby中使用类变量

我有一段使用类变量的代码.我已经读过Ruby中通常应该避免使用类变量.

类变量是@@cost@@kwh.

如何在不使用类变量的情况下重写以下内容?

class Device
 attr_accessor :name, :watt

 @@cost = 0.0946

 def initialize(name, watt)
   @name = name
   @watt = watt
 end

  def watt_to_kwh(hours)
    @@kwh = (watt / 1000) * hours
  end

  def cost_of_energy
    puts "How many hours do you use the #{self.name} daily?"
  hours = gets.chomp.to_i
    self.watt_to_kwh(hours)
    daily_cost = @@kwh * @@cost
    montly_cost = daily_cost * 30
    puts "Dayly cost: #{daily_cost}€"
    puts "montly_cost: #{montly_cost}€"
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby class-variables

0
推荐指数
1
解决办法
117
查看次数

使用self访问类方法和变量

在下面的示例中,Test类有两个实例方法和一个classmethod

set_cls_var_1方法中,我使用self设置类变量.

set_cls_var_2方法中,我使用self调用类方法.

   class Test():

        #class variable
        cls_var = 10

        def __init__(self):
           obj_var=20

        def set_cls_var_1(self,val):
            #second method to access class variable
            print "first "
            self.cls_var = val

        def set_cls_var_2(self):
            print "second"
            self.task(200)

        @classmethod
        def task(cls,val):
            cls.cls_var = val


t=Test()

#set class variable by first method
t.set_cls_var_1(100)

print Test.cls_var

#set class variable by second method
t.set_cls_var_2()

print Test.cls_var
Run Code Online (Sandbox Code Playgroud)

产量

first 
10
second
200
Run Code Online (Sandbox Code Playgroud)

预期产出

first 
100
second
200
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么只有classmethod可以自己调用,为什么不是类变量

python class class-method class-variables python-2.7

0
推荐指数
2
解决办法
9896
查看次数