Reputation: 1789
Having trouble understanding the problem in my code, new to classes (generally python too, so sorry if I name things wrong). I receive this error:
I think my code is too long winded to include in here, so I made a simplified version to test the concept below.
The question is, how can I create a new self object "self4"? Which would then be available to other functions within the class. Currently I get this error.
AttributeError: 'className' object has no attribute 'self4'
class className(object):
def __init__(self, self1=1,self2=2,self3=3):
self.self1=self1
self.self2=self2
self.self3=self3
def evaluate(self, self5):
print className.func1(self) + className.func2(self)
self.self5=self5
print className.func1(self)
def func1(self):
return self.self1 + self.self5
def func2(self):
self.self4 = self.self1+self.self2+self.self3
return self.self4
filename tester.py
import tester.py
mst=tester.className()
mst.evaluate()
Upvotes: 5
Views: 59280
Reputation: 2241
If someone else ever gets this error and it is not an indentation problem, the error can also occur if you accidentally wrote ;
Instead of :
for the type annotation:
>>> class Example:
... def __init__(self, var: str) -> None:
... self.var; str = var
...
>>> Example('foo')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in __init__
AttributeError: 'Example' object has no attribute 'var'
Upvotes: 1
Reputation: 101
If anyone still has this issue: you get this error when your indentation is goofed.To fix the asked question above, you just have to add a space before the last two functions definitions, that is;
class className(object):
def __init__(self, self1=1,self2=2,self3=3):
self.self1=self1
self.self2=self2
self.self3=self3
def evaluate(self, self5):
print className.func1(self) + className.func2(self)
self.self5=self5
print className.func1(self)
def func1(self):
return self.self1 + self.self5
def func2(self):
self.self4 = self.self1+self.self2+self.self3
return self.self4
just make sure they all have similar indentation, and you are good to go.
Upvotes: 4
Reputation: 4255
Edit:
Your code works fine!
What is the Problem?
I still think it is better to move self4
into the init!
Original
I think the most logical thing would be to define self4
on init:
class className(object):
def __init__(self, self1=1, self2=2, self3=3):
self.self1 = self1
self.self2 = self2
self.self3 = self3
self.self4 = None
#rest of class
Upvotes: 4