标签: class-variables

如何从Python中的另一个类访问类变量?

我有以下代码段:

class A:
    def __init__(self):
        self.state = 'CHAT'

    def method1(self):
        self.state = 'SEND'

    def printer(self):
        print self.state


class B(A):
    def method2(self):
        self.method1()
        print self.state

ob_B = B()
ob_A = A()
ob_B.method2()
ob_A.printer()
Run Code Online (Sandbox Code Playgroud)

这给了我输出:

SEND
CHAT
Run Code Online (Sandbox Code Playgroud)

我想要它打印:

SEND
SEND
Run Code Online (Sandbox Code Playgroud)

也就是说,当通过调用 self.method1 修改 self.state 时,我希望它修改A 实例中B.method2已经存在的值。self.state = 'CHAT'我怎样才能做到这一点?

python class class-variables

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

cattr_accessor 默认值语法

我有点恼火为什么会这样:

cattr_accessor :aggregate { true }
Run Code Online (Sandbox Code Playgroud)

失败并出现错误:

syntax error, unexpected '{', expecting keyword_end
  cattr_accessor :aggregate { true }
                            ^
Run Code Online (Sandbox Code Playgroud)

虽然完全相同,但 do/end 似乎在做正确的事情:

cattr_accessor :aggregate do true end
Run Code Online (Sandbox Code Playgroud)

(但是太冗长了;)

来源:http : //api.rubyonrails.org/classes/Class.html#method-i-cattr_writer 考虑到我必须花在这个上的时间,它有点过于粗糙。想法?

ruby-on-rails class-variables

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

类变量的行为类似于实例变量 (Python 3.4)

Python 3.4.0a1
视窗 8.1

创建的类:

class Bank(object):  
    bankrupt = False  
Run Code Online (Sandbox Code Playgroud)

命令在 IDLE 中输入,__main__结果如下:

>>> a = Bank()
>>> b = Bank()
>>> a.bankrupt
False
>>> b.bankrupt
False
>>> b.bankrupt = True
>>> b.bankrupt
True
>>> a.bankrupt
False
Run Code Online (Sandbox Code Playgroud)

预期输出:

当我更改 b.bankrupt 时,我预计 a.bankrupt 会更改为 True,因为变量 bankrupt 是为整个类定义的,而不是为单个实例定义的(带有self.bankrupt) 为什么这没有发生?

python instance-variables class-variables python-3.x

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

ruby 动态添加类变量

例子:

class Base
  @@var = "base"

  def self.assign_var(var)
    @@var = var
  end

  def self.show_var
    @@var
  end

  def initialize
    p @@var
  end

end

class A < Base
  assign_var("a")
end

class B < Base
  assign_var("b")
end

class C < Base
  assign_var("c")
end

p A.show_var # "c"
p B.show_var # "c"
p C.show_var # "c"
a = A.new # "c"
b = B.new # "c"
c = C.new # "c"
Run Code Online (Sandbox Code Playgroud)

如何让他们表现出自己在班级中分配的价值?像这样:

p A.show_var # "a"
p B.show_var # "b"
p C.show_var # "c" …
Run Code Online (Sandbox Code Playgroud)

ruby class-variables

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

我可以使用全局变量初始化类变量吗?(红宝石)

我是否为这种作业创建了额外的方法?@@variable = @global_variable为什么?我希望有一些变量可以通过我的脚本访问值和定义,并且只有一个定义位置.

@global_variable = 'test'

class Test

@@variable = @global_variable

  def self.display
    puts @@variable
  end
end

Test.display #gives nil
Run Code Online (Sandbox Code Playgroud)

ruby scope class-design class-variables

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

什么不能从ruby中的对象访问类变量?

我不想从外部(通过attr_accessor)设置类的类变量,然后从其中一个对象内部访问它.我正在使用ruby 1.9.2.这是我的代码:

class Service
  def initialize(id)
    @my_id = id   
  end

  class << self
    attr_accessor :shared_id
  end

  def system_id
    @my_id + @@shared_id
  end
end
Run Code Online (Sandbox Code Playgroud)

如果我设置Service.shared_id = "A2",然后调用Service.new("A").system_id,这不会返回"AA2".它显示以下错误:

服务中未初始化的类变量@@ shared_id

如果我没有设置Service.service_id,则行为就像.有人可以解释为什么会这样吗?

ruby class-variables

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

在类中运行相同的java程序两次使用静态变量

(我不知道我是否应该在这里问这个)我想运行两次相同的java程序,其中大部分变量都是静态的.

如果我运行这两次(同时)这些静态变量将具有相同的值或不同?

由于静态变量是类变量,这让我感到困惑.

java variables static scope class-variables

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

Ruby中的类变量

我在本教程中遇到了以下示例:

class Song
  @@plays = 0

  def initialize(name, artist, duration)
    @name = name
    @artist = artist
    @duration = duration
    @plays = 0
  end

  def play
    @plays += 1
    @@plays += 1
    "This song: #@plays plays. Total #@@plays plays."
  end
end

s1 = Song.new("Song1", "Artist1", 234)    # test songs
s2 = Song.new("Song2", "Artist2", 345)   

puts s1.play
puts s2.play
puts s1.play
puts s1.play 
Run Code Online (Sandbox Code Playgroud)

@@只能在Song课程中礼貌地播放吗?这篇评论提出了不建议使用类变量的观点.是不是b/c它们在日常使用中通常不需要,并且在使用时会产生很多调试问题?

ruby class-variables

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

Perl对象 - 类变量初始化

我刚刚开始设计一个Perl类,而我很久以前使用OOP的唯一体验就是使用C++.

我需要将一些数据项作为"类变量" - 由所有实例共享.我希望在我第一次实例化一个对象之前对它们进行初始化,并且我希望主程序use MyClass能够为该初始化过程提供参数.

这是一个带有类变量的类的工作示例:

package MyClass;
use strict;
use warnings;

# class variable ('our' for package visibility)                                                                 
#                                                                                                               
our $class_variable = 3;  # Would like to bind to a variable                                                    

sub new {
     my $class = shift;
     my $self = { };
     bless $self, $class;
     return $self;
}

sub method {
    my $self = shift;
    print "class_variable: $class_variable\n";
    ++$class_variable; # prove that other instances will see this change                                        
}
Run Code Online (Sandbox Code Playgroud)

这是一个演示:

#!/usr/bin/perl                                                                                                 

use strict;
use warnings;
use …
Run Code Online (Sandbox Code Playgroud)

oop perl initialization class-variables

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

从继承的实例访问本地类变量

我有我的伪接口,我实现了几次.每个实现都应该存储一个基本上定义文件路径(模板)的变量.因为这些类是由工厂生成的,所以我不知道会出现哪个子类,因此,我想通过实例方法访问类变量.

这并不会造成问题,但是,当我从我的Interface继承时,我不想getHidden()多次实现该方法(在下面).但是把它称之为它所记录的方式,总会隐藏起来.

class MySuperInterface(object):
    # class Variable
    __much = "hidden"

    # instance method
    def getHidden(self):
        print self.__class__.__much

class MySub(MySuperInterface):
    __much = "this is different per subclass!"

    def soTroublesome(self):
        print self.__class__.__much
Run Code Online (Sandbox Code Playgroud)

执行

>>> sub = MySub() # I don't know this class!

>>> sub.getHidden()
hidden

>>> sub.soTroublesome()
this is different per subclass!
Run Code Online (Sandbox Code Playgroud)

那么,我如何实现getHidden()访问实例的类'classvariable.我知道,我检查过的信息是可用的dir(),但我不知道如何访问它.同样,我不想最终得到一个类/静态方法,因为我不知道从我的工厂出来的类!

谢谢!

python inheritance class-variables

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