How to reference global variables and class variables?
Global scope is scope that covers the entire program. Global scope is enjoyed by global variables, which are recognizable by their initial dollar-sign ($) character. They’re available everywhere and creating your own global variables can be tempting, especially for beginning programmers. But they’re not always a good idea.
$gvar = "I'm a global!"
class C
def examine_global
puts $gvar
end
end
c = C.new
c.examine_global # I'm a global!
Class variables begin with two at signs: @@var, for example. Despite their name, class variables aren’t class scoped. Rather, they’re class-hierarchy scoped. At its simplest, the idea behind a class variable is that it provides a storage mechanism that’s shared between a class and instances of that class, and that’s not visible to any other objects.
class Parent
@@value = 100
end
class Child < Parent
@@value = 200
end
class Parent
puts @@value
end
What gets printed is 200. The Child class is a subclass of Parent, and that means Parent and Child share the same class variables—not different class variables with the same names, but the same actual variables. When you assign to @@value in Child, you’re setting the one and only @@value variable that’s shared throughout the hierarchy—
that is, by Parent and Child and any other descendant classes of either of them.
And to give credit where its due - This explanation comes from "The Well Grounded Rubyist" by David A Black, one of the best resources to learn about Ruby.
How can I access global variable inside class in Python
By declaring it global
inside the function that accesses it:
g_c = 0
class TestClass():
def run(self):
global g_c
for i in range(10):
g_c = 1
print(g_c)
The Python documentation says this, about the global
statement:
The global statement is a declaration which holds for the entire current code block.
Assign Global Variable Inside Class From Class Variable
__table__
is a class variabe, which means you can access it from an instance or from the class itself. You can update any instance value according to the value of backfill
in the __init__
method:
class Model(Object):
__table__ = 'table_name'
def __init__(self, backfill = False):
self.backfill = backfill
if self.backfill:
self.__table__ = 'table_name2'
Then to create an instance, just give the backfill
parameter to the constructor, without any if/else statement:
print(Model.__table__)
# table_name
backfill = True
model = Model(backfill)
print(model.__table__)
# table_name2
But I don't see the point of using a class variable in your case. You can just define it in the __init__
method:
class Model(Object):
def __init__(self, backfill = False):
self.backfill = backfill
self.__table__ = 'table_name'
if self.backfill:
self.__table__ = 'table_name2'
Global variable inside the class and local function variable
Use this->a
.
this
allows you to access the members and methods of an instance from within.
EDIT: this is an academical exercise, but a bad programming practice. Just use different names for classes, members and variables.
How to define global variable in class in python
If you just want to define your variable outside of the class you don't need to use the global
keyword unless you plan on modifying it. If you just want to read the variable and not modify it you could just do something like.
ask = input("What type you are writing? (absolute value and phase angle or real and imaginary parts)")
class ComplexMethods:
if ask == "real and imaginary parts":
pass
if ask == "real and imaginary parts":
firstcomplexreal = float(input("Enter real part of first complex number: "))
firstcompleximaginary = float(input("Enter imaginary part of first complex number: "))
secondcomplexreal = float(input("Enter real part of second complex number: "))
secondcompleximaginary = float(input("Enter imaginary part of second complex number: "))
complexnumbers = ComplexMethods(firstcomplexreal, firstcompleximaginary, secondcomplexreal,
secondcompleximaginary)
Global variables in Java
To define Global Variable you can make use of static Keyword
public class Example {
public static int a;
public static int b;
}
now you can access a and b from anywhere
by calling
Example.a;
Example.b;
Related Topics
Measure and Benchmark Time for Ruby Methods
How to Get Activerecord Associations via Reflection
How to Generate a Random Number Between a and B in Ruby
How to Run Shell Commands on Server in Capistrano V3
Rake VS. Thor for Automation Scripts
Rails: Good Rspec2 Example Usage? (Also: Cucumber, Pickle, Capybara)
Ruby Method Calls Declared in Class Body
Extract Links (Urls), with Nokogiri in Ruby, from a Href HTML Tags
Mongodb with Mongoid in Rails - Geospatial Indexing
Ruby: How to Iterate Over an Array of Hashes and Return the Values in a Single String
Creating Signature and Nonce for Oauth (Ruby)
Rails: Money Gem Converts All Amounts to Zero
Array.Join("\N") Not the Way to Join with a Newline