Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OOP工厂模式_Python_Design Patterns_Factory - Fatal编程技术网

Python OOP工厂模式

Python OOP工厂模式,python,design-patterns,factory,Python,Design Patterns,Factory,我仍然在学习OOP设计模式,到目前为止我读到的所有东西都说工厂模式是常用的。我仍在努力学习这种模式。对于我的程序,我正在创建一个名为“person”的抽象工厂,我的名为“personFactory”的工厂应该允许您创建不同类型的人(用户、客户、水管工等)。使用我当前的代码,我遇到以下错误: AttributeError: 'NoneType' object has no attribute 'fName' 这是我的代码: person.py import abc class person:

我仍然在学习OOP设计模式,到目前为止我读到的所有东西都说工厂模式是常用的。我仍在努力学习这种模式。对于我的程序,我正在创建一个名为“person”的抽象工厂,我的名为“personFactory”的工厂应该允许您创建不同类型的人(用户、客户、水管工等)。使用我当前的代码,我遇到以下错误:

AttributeError: 'NoneType' object has no attribute 'fName'
这是我的代码:

person.py

import abc

class person:
    __metaclass__ = abc.ABCMeta
    fName = ""
    mName = ""
    lName = ""
    address = ""
    city = ""
    state = ""
    zipcode = ""
    email = ""
    phone = ""
    dob = None
personFactory.py

from person import person

class personFactory(person):

    def createUser(self):
        uName = ""
        password = ""
        role = ""
        def __init__(self,uName,password,role):
            self.uName = uName
            self.password = password
            self.role = role
        def login(uName,password):
            if(uName == self.uName and password == self.password):
                return "Logged In"
            else:
                return "Did not log in"
        def logout():
            return "Logout"

    def createCustomer(self):
        items = []
        balace = 0
        def __init__(self,balance):
            self.balance = balance
        def AddToCart(item):
            self.items.append(item)
            print("Item added")
        def Order(items):
            totalprice = 0
            for item in items:
                totalprice =+ item.price
            return totalprice
        def Pay(payment):
            self.balance =- payment
            return self.balance
main.py

import personFactory

class main():
    pf = personFactory.personFactory()
    user1 = pf.createUser()
    user1.fName = "John"
    user1.lName = "Smith"
    user1.uName = "jSmith"
    user1.password = "Jamestown"

    customer1 = pf.createCustomer()
    customer1.fName = "George"
    customer1.lName = "Washington"
    customer1.balance = 100

main()

我不知道为什么fName是非类型的。我做错了什么?任何帮助都将不胜感激

在create\u user方法中有构造函数。正如Ignacio所说,init函数必须在create\u user函数之外,以便在创建时将名称、传递和角色传递给person\u factory对象

或者,您也可以将所有这些值作为参数传递给create_user方法,而不使用类构造函数

可能是这样的

类别人员工厂(人):

或者

类别人员工厂(人):

我还建议您使用继承,并基于表示每个对象的抽象类创建具体的类

class User(Person):

      def __init__(name, password, role):
          self.name = name
          self.type = "User"
          self.password = password

因此,您可以有一个用户类和一个客户类,并且您工厂的每个方法都可以创建相应的对象,而不是一个普通人。

您不能调用它,因为
personFactory
是一个类。为了使用当前代码调用它,您首先需要在调用该方法之前创建该类的实例。例如,
pf=personFactory()
,然后
pf.createUser()
。顺便说一句,您应该遵循命名类、方法和函数的编码约定。谢谢!实际上,我必须添加pf=personFactory.personFactory()并从person.py中删除init。我一定会看一下政治公众人物8的文件。以下更改仍然没有使我的程序运行。请查看我的编辑。您需要非常仔细地阅读代码,了解您的代码类型以及您试图如何使用它们。@IgnacioVazquez Abrams谢谢您,但您能详细说明一下吗?您认为函数中的函数做什么?
  def createUser(self, uName, password, role):
       user = Person()
       user.type = "user"
       user.uName = uName
       user.password = password
       user.role = role
       return user
class User(Person):

      def __init__(name, password, role):
          self.name = name
          self.type = "User"
          self.password = password