Python Classes ( Attributeerror: '' Object Has No Attribute '')

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()
3

3 Answers

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
1

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.

You should pass self4 in method.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Robert Thorne

Robert Thorne

Automotive & Future Transportation Editor

Robert Thorne covers electric vehicle innovations, autonomous driving systems, global mobility trends, and automotive engineering developments.

Share this article
Twitter Facebook Pinterest