Calling a variable inside a function of another class

S

Steven D'Aprano

I am trying to call a variable located in a function of a class from
main but couldn't succeed.Any ideas?

You cannot access local variables from outside their function. That's why
they are called *local* variables.

You probably want to access *attributes* of the class or the instance.
You have to define them first -- you can't access something that doesn't
exist.

class Test:
shared = 42 # Shared, class attribute
def __init__(self):
self.dt = 23 # Instance attribute, not shared.


print(Test.shared) # prints 42

However, print(Test.dt) fails because no instance has been created yet,
and so there is no dt attribute. You have to create an instance first,
then __init__ will run and create the attribute:

instance = Test()
print(instance.dt) # prints 23
 
Y

Yigit Turgut

You cannot access local variables from outside their function. That's why
they are called *local* variables.

You probably want to access *attributes* of the class or the instance.
You have to define them first -- you can't access something that doesn't
exist.

class Test:
    shared = 42  # Shared, class attribute
    def __init__(self):
        self.dt = 23  # Instance attribute, not shared.

print(Test.shared)  # prints 42

However, print(Test.dt) fails because no instance has been created yet,
and so there is no dt attribute. You have to create an instance first,
then __init__ will run and create the attribute:

instance = Test()
print(instance.dt)  # prints 23

How about assigning the variable as global, wouldn't it be more
effective?
 
D

Dennis Lee Bieber

How about assigning the variable as global, wouldn't it be more
effective?

"global somename" only tells the Python interpreter that all
references WITHIN a function definition to "somename" really are
references to "somename" at the MODULE level.


-=-=-=-=- amodule.py

name1 = 123
name2 = 456
name3 = 789

def afunc(x):
global name1
z = x + name1 #okay, it is using the module name1
name1 = z #still okay
y = x + name2 #okay so far, will look up to the module level
e = y + name3 #due to the next line, this will error
name3 = e #no global, name3 is local, and above is undefined
 
J

Jean-Michel Pichavant

Yigit said:
class test(test1):

def __init__(self, device):
.
.
.
def _something(self, x=1)
self.dt = data


if __name__ == "__main__":
test.something.dt ???

I am trying to call a variable located in a function of a class from
main but couldn't succeed.Any ideas?

if __name__ == "__main__":
aTest = test(whateverdevice)
print aTest.dt

Some advices:

- a common practice in python is to name classes in CamelCase ( read http://www.python.org/dev/peps/pep-0008/ )
- if dt is a shortcut for data, it's a bad one.
- default values are for loosers, they should be used only to keep backward compatibility (personal opinion, a lot of ppl would disagree)
- "call" is usually reserved for method and function, or any callable object in python. What you're trying to do is to reference an object, not calling it.

JM
 
T

Terry Reedy

dt is an attribute of an instance of the class.
t = test() # create instance
t._something() # call method that assigns attribute to t
t.dt # is not the value of dt for t
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,774
Messages
2,569,599
Members
45,165
Latest member
JavierBrak
Top