标签: class-variables

在模块中设置新的类变量

我有一个我一直在努力的插件,它将发布添加到ActiveRecord类.我和我的发布者一起扩展我的课程:

class Note < ActiveRecord::Base
  # ...
  publishable :related_attributes => [:taggings]
end
Run Code Online (Sandbox Code Playgroud)

我的发布商的结构如下:

module Publisher

  def self.included(base)
    base.send(:extend, ClassMethods)

    @@publishing_options = [] # does not seem to be available
  end

  module ClassMethods

    def publishable options={}
      include InstanceMethods

      @@publishing_options = options

      # does not work as class_variable_set is a private method
      # self.class_variable_set(:@@publishing_options, options)

      # results in: uninitialized class variable @@publishing_options in Publisher::ClassMethods
      puts "@@publishing_options: #{@@publishing_options.inspect}"

      # ...
    end

    # ...

  end

  module InstanceMethods

    # results in: uninitialized class variable @@publishing_options …
Run Code Online (Sandbox Code Playgroud)

ruby class-variables

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

类变量:公共访问只读,但私有访问r/w

在我当前的项目中,我有一个类,它将Instance存储在一个变量中.该实例应该可以被项目中的所有其他类访问,但它只能由其自己的类更改.

我怎样才能做到这一点?

java class-variables

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

Ruby on Rails中的类访问器和继承

如下面的代码所示,在超类中定义类访问器可能会有意外行为,因为类访问器对于所有子类都是相同的变量.

class Super 
  cattr_accessor :name
end

class SubA < Super; end
class SubB < Super; end

SubA.name = "A"
SubB.name = "B"

SubA.name
 => "B" # unexpected!
Run Code Online (Sandbox Code Playgroud)

我希望每个子类都有一个独立的类访问器,因此可能的解决方案是将cattr_accessor从超类中移出并将其放在每个子类中.

class Super; end

class SubA < Super
  cattr_accessor :name
end

class SubB < Super
  cattr_accessor :name
end

SubA.name = "A"
SubB.name = "B"

SubA.name
 => "A" # expected!
Run Code Online (Sandbox Code Playgroud)

这个解决方案是一个很好的做法吗?你知道更好的选择吗?

ruby inheritance ruby-on-rails class-variables

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

C++中如何使用函数作为变量

我想用 C++ 创建某种事件系统来满足我的需要

我知道你可以使用函数作为其他函数参数

可能我错过了一些东西(但在 C# 中你可以使用事件处理程序来做到这一点)

c++ variables class class-variables

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

实例变量,类变量以及它们在ruby中的区别

我很难理解实例变量,类变量以及它们之间在ruby中的区别......有人可以向我解释它们吗?我已经完成了大量的谷歌搜索,完全无法理解它们.

谢谢!

ruby instance-variables class-variables

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

如何传递静态/类变量的值?

静态/类变量在类型/类中定义,并且被称为与其定义的类型/类相关联,并且独立于类型/类的实例.类型/类中只有一个静态/类变量,最好用于常量like属性,其值在类的任何实例中都很常见.静态/类变量的状态始终存在于类中,因此在类中的任何时刻只有一个变量,而关键字static用于定义变量的这种性质.最佳实践中的static/class变量将初始化一次,并使用关键字final确保.最终的静态变量将使用不可变的集合进行初始化,如新的String()或new Integer();

现在我的问题是静态变量的值是如何使用的?这个变量的用途是什么?例如,它是从包含它的类中复制它的值还是它是对类中变量的显式引用?

例如

class GenericType {
    private final static String commonValue = new String("foobar");
} 
class AnotherGenericType {
    public static void main(String[] args) {
        System.out.println(GenericType.commonValue); //Displays foobar in the console.

    }
}
Run Code Online (Sandbox Code Playgroud)

java static-members class-variables

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

用于访问类变量的Python关键字

考虑Python 3中的以下类:

class Foo(AnotherClass):
    id_counter = 0
    def __init__(self):
        super().__init__()
        self.id = Foo.id_counter
        Foo.id_counter += 1
Run Code Online (Sandbox Code Playgroud)

是否有一个关键字(super在本例中类似于Python )可用于访问类变量而不是放置类名Foo

python keyword class-variables python-3.x

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

如何使用Rails进行线程安全单例,如何保持我的类变量安全?

我已经读过Is Rails无共享或者可以单独请求访问相同的运行时变量吗?他们解释我的问题:

类变量可能在我的rails srver的两个请求之间共享,但解决方案在哪里!?

如何在请求之间实现安全单例?

class Foo
  @@instances = []
end
Run Code Online (Sandbox Code Playgroud)

我怎样才能确定每个请求HTTP都会重置实例?!

编辑:

我发现"config.reload_classes_only_on_change = false"解决方案,但我不确定它是最好的性能.
这个选项有什么后果?

我有一个例子来测试安全类变量:

class Test
   def self.log
      @test ||= false
      puts @test
      @test = true
   end
end


class ApplicationController < ActionController::Base
   def index
      Test.log
      Test.log
   end
end
Run Code Online (Sandbox Code Playgroud)

如果我通过重新加载动作(F5)启动此代码,我希望每次在rails服务器的日志中读取"false".但是,默认情况下它只是第一次"假".

编辑2:实际上这个选项重装类,但没有解决线程中的concurency问题.类变量被重置,但它们可以被其他线程修改.

线程安全类变量如何?

singleton static-variables thread-safety class-variables ruby-on-rails-4

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

Python 3中类的字符串表示形式

我希望我的类有一个基于类变量的字符串表示(在派生类中可能有所不同).这个答案表明,元类可能是要走的路:

class MC(type):
    def __repr__(self):
        return 'Wahaha!'

class C():
    __metaclass__ = MC

print(C)
Run Code Online (Sandbox Code Playgroud)

但这在Python 3中不起作用,返回

<class '__main__.C'>
Run Code Online (Sandbox Code Playgroud)

而不是Wahaha!.有人可以向我解释Python 2和3之间的变化以及如何在Python 3中进行更改吗?

python class representation class-variables python-3.x

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

Python Sqlalchemy - 表名作为变量

我在 Python 中使用 SQLAlchemy 并声明我的类继承自声明性基础,如下所示:

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class SomeClass(Base):
    __tablename__ = 'some_table'
    id = Column(Integer, primary_key=True)
    name =  Column(String(50))
Run Code Online (Sandbox Code Playgroud)

作为用户,我想将 定义__tablename__为参数,而不是硬编码的 value ,如下所示:

class SomeClass(Base):
    __tablename__ = f'{environment}_some_table'
    id = Column(Integer, primary_key=True)
    name =  Column(String(50))
Run Code Online (Sandbox Code Playgroud)

我的理解是,f'{environment}_some_table'当我导入这个包时将对其进行评估,因此我将无法在稍后阶段(即在交互式笔记本中)修改它。我有一段损坏的代码试图通过嵌套类和封装来解决这个问题,但我没有设法引用外部类的实例变量。

class Outer:
    def __init__(self, env):
        self.environment = env

    class SomeClass(Base):
        __tablename__ = f'{self.environment}_some_table'
        id = Column(Integer, primary_key=True)
        name =  Column(String(50))
Run Code Online (Sandbox Code Playgroud)

我读过几个 SO 问题,最好不要使用嵌套类,因为这些类之间没有建立特殊关系。那么我应该使用什么样的设计来解决这个问题呢?

提前致谢!

python nested sqlalchemy runtime class-variables

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