我是一个python新手,我正在尝试使用OOP方式编写简单的项目。
第一个函数等待用户界面输入用户名。
第二个功能等待用户界面输入用户的姓氏。
THEN
第三个函数打印全名。
但是
当我尝试启动这些功能时,它会给我带来错误。
以下是代码:
class UserFullName:
def __init__(self, FirstName, LastName, FullName):
self.FirstName = FirstName
self.LastName = LastName
self.FullName = FullName
def FirstName(self):
FirstName = input("enter your first name:\n".title())
return FirstName
def LastName(self):
LastName = input("enter your last name:\n".title())
return LastName
def FullName(self, FirstName, LastName):
print('welcome', "{} {}".format(FirstName, LastName).title())
return
UserFullName.FirstName()
UserFullName.LastName()
UserFullName.FullName()
这是错误:
追踪(最近一次呼叫最后一次):
文件“E:/Tutorial/pan.py”,第20行,
UserFullName.FirstName()
TypeError:FirstName()缺少1个必需的位置参数:'self'
答案 0 :(得分:2)
如果要以OOP方式执行此操作,则需要使对象的状态(即用户的名字和姓氏)成为对象的一部分。像这样:
def FirstName(self):
self.FirstName = input("enter your first name:\n".title())
return self.FirstName
def LastName(self):
self.LastName = input("enter your last name:\n".title())
return self.LastName
def FullName(self, FirstName, LastName):
print('welcome', "{} {}".format(self.FirstName, self.LastName).title())
return
self.FirstName
是对象的成员,可以从其他方法访问。
但是你还必须在一个对象上调用这些方法。这意味着你必须创建一个类的实例:
user = UserFullName()
user.FirstName()
user.LastName()
user.FullName()
除了因为另外两个问题而无法正常工作。
首先,您的方法与您的属性具有相同的名称。设置self.FirstName
后,再也无法再调用FirstName
方法,因为您已隐藏它。
其次,初始化程序要求您传入名字,姓氏和姓氏。但是你还没有这些名字!它们只会在以后使用input
调用这些方法时才会出现。所以你必须做user = UserFullName('', '', '')
之类的事情。但更好的解决方案是完全删除__init__
方法,或重新排列事物,以便在创建类之前发生input
,并且可以传入名称,而不是在方法内部进行。
答案 1 :(得分:0)
我的示例使用 init 函数,该函数将在您初始化类时执行,如果您不想使用它,则可以使用其他用户提供的以下示例
作为字符串的建议我建议使用raw_input,无论如何以下都可以使用:
class UserFullName():
def __init__(self):
self.FirstName()
self.LastName()
self.FullName()
def FirstName(self):
self.FirstName = raw_input("enter your first name:\n")
def LastName(self):
self.LastName = raw_input("enter your last name:\n")
def FullName(self):
print("Welcome "+str(self.FirstName)+" "+str(self.LastName))
UserFullName()
如果你想要在前两种方法中返回,你甚至可以用另一种方式做到:
class UserFullName():
def __init__(self):
name=self.FirstName()
surname=self.LastName()
self.FullName(name,surname)
def FirstName(self):
FirstName = raw_input("enter your first name:\n")
return (FirstName)
def LastName(self):
LastName = raw_input("enter your last name:\n")
return (LastName)
def FullName(self, name, surname):
print("Welcome "+str(name)+" "+str(surname))
UserFullName()
答案 2 :(得分:-1)
你打电话给UserFullName
,但没有给它__init__
函数提供的参数。请尝试使用UserFullName(FirstName='James', LastName='Sull', FullName='James Sull').FirstName()
之类的内容。
答案 3 :(得分:-2)
如果要使用类变量,则需要使用self来引用它,并尝试不对变量和方法使用相同的名称。 顺便说一下,你需要创建一个类的实例来使用
class UserFullName:
def FirstName(self):
self.firstName = input("enter your first name:\n".title())
return self.firstName
def LastName(self):
self.lastName = input("enter your last name:\n".title())
return self.lastName
def FullName(self):
print('welcome', "{} {}".format(self.firstName, self.lastName).title())
userFullName = UserFullName()
userFullName.FirstName()
userFullName.LastName()
userFullName.FullName()
Enter Your First Name:
1
Enter Your Last Name:
2
('welcome', '1 2')
或者如果您更喜欢类方法
class UserFullName:
@classmethod
def FirstName(self):
self.firstName = input("enter your first name:\n".title())
return self.firstName
@classmethod
def LastName(self):
self.lastName = input("enter your last name:\n".title())
return self.lastName
@classmethod
def FullName(self):
print('welcome', "{} {}".format(self.firstName, self.lastName).title())
UserFullName.FirstName()
UserFullName.LastName()
UserFullName.FullName()
Enter Your First Name:
1
Enter Your Last Name:
2
('welcome', '1 2')