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