Reputation: 839
I have a python script and I am receiving the following error:
Traceback (most recent call last):
File "C:\Users\Tim\Desktop\pop-erp\test.py", line 1, in <module>
s = Something()
NameError: name 'Something' is not defined
Here is the code that causes the problem:
s = Something()
s.out()
class Something:
def out():
print("it works")
This is being run with Python 3.3.0 under Windows 7 x86-64.
Why can't the Something
class be found?
Upvotes: 72
Views: 865434
Reputation: 1
I got the same error below:
NameError: name 'name' is not defined
When I don't define the getter method with @property
while the setter and deleter are defined as shown below:
class Person:
def __init__(self, name):
self._name = name
# @property
# def name(self):
# return self._name
@name.setter
def name(self, name):
self._name = name
@name.deleter # Here
def name(self):
del self._name
Upvotes: -3
Reputation: 15058
Note that sometimes you will want to use the class type name inside its own definition, for example when using Python Typing module, e.g.
class Tree:
def __init__(self, left: Tree, right: Tree):
self.left = left
self.right = right
This will also result in
NameError: name 'Tree' is not defined
That's because the class has not been defined yet at this point. The workaround is using so called Forward Reference, i.e. wrapping a class name in a string, i.e.
class Tree:
def __init__(self, left: 'Tree', right: 'Tree'):
self.left = left
self.right = right
Upvotes: 24
Reputation: 298582
Define the class before you use it:
class Something:
def out(self):
print("it works")
s = Something()
s.out()
You need to pass self
as the first argument to all instance methods.
Upvotes: 112
Reputation: 143
You must define the class before creating an instance of the class. Move the invocation of Something
to the end of the script.
You can try to put the cart before the horse and invoke procedures before they are defined, but it will be an ugly hack and you will have to roll your own as defined here:
Make function definition in a python file order independent
Upvotes: 5