Using Builder Pattern, I got AttributeError: 'NoneType' object has no attribute to builder class function

376 Views Asked by At

I try to instance my class that made by using builder pattern

class Cat:
    def __init__(self,height,weight, color):
        self.height = height
        self.weight = weight
        self.color = color
    def print(self):
       print("%d %d %s" %(self.height,self.weight,self.color))
class CatBuilder:
    def __init__(self):
        self.weight = None
        self.height = None   
        self.color = None 
    def setWeight(self,weight):
        self.weight = weight
    def setHeight(self,height):
        self.height = height
    def setColor(self,color):
        self.color = color
    def build(self):
        cat = Cat(self.height,self.weight,self.color)
        return cat

then I use below code to run cat1.print()

#error version
cat1 = CatBuilder().setColor("red").setHeight(190).setWeight(80)
cat1.print()
#correct version
cat_builder = CatBuilder()
cat_builder.setColor("red")
cat_builder.setHeight(180)
cat_builder.setWeight(50)
cat2 = cat_builder.build()
cat2.print()

I think both of code is right, but #error version is not working.. How can I fix it??

1

There are 1 best solutions below

0
On

I got my answer! I have to append return self code like below:

class Cat:
    def __init__(self,height,weight, color):
        self.height = height
        self.weight = weight
        self.color = color
    def print(self):
       print("%d %d %s" %(self.height,self.weight,self.color))

class CatBuilder:
    def __init__(self):
        self.weight = None
        self.height = None   
        self.color = None 
    def setWeight(self,weight):
        self.weight = weight
        return self
    def setHeight(self,height):
        self.height = height
        return self
    def setColor(self,color):
        self.color = color
        return self
    def build(self):
        cat = Cat(self.height,self.weight,self.color)
        return cat