【发布时间】:2015-09-23 19:36:05
【问题描述】:
我仍在学习 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 是 NoneType。我究竟做错了什么?任何帮助将不胜感激!
【问题讨论】:
-
你不能调用它,因为
personFactory是一个类。为了使用您当前的代码调用它,您首先需要在调用该方法之前创建一个类的实例。 IE。pf = personFactory(),然后是pf.createUser()。顺便说一句,您应该遵循PEP 8 - Style Guide for Python Code 命名类、方法和函数的编码约定。 -
谢谢!我实际上必须添加 pf = personFactory.personFactory() 并从 person.py 中删除 init。我一定会查看 PEP 8 文档。以下更改仍未使我的程序运行。请检查我的修改。
-
您需要非常仔细地阅读您的代码,并了解您拥有哪些类型以及您将如何尝试使用它们。
-
@IgnacioVazquez-Abrams 谢谢,但能否详细说明一下?
-
你认为函数中的函数有什么作用?
标签: python design-patterns factory