我一直在尝试覆盖对象“Pete Tong”下的fullname
的第一个输入,并使用split
函数将其更改为“James Milner”。
但是,当我运行以下代码时,除了打印fullname()
之外的所有输出都返回“Pete Tong”的名字和姓氏,我试图为所有访问更改。知道为什么吗?我认为应该用覆盖打印所有“James Milner”。
class Employee:
def __init__(self, first, last):
self.first = first
self.last = last
@property
def email(self):
return "{}.{}@email.com".format(self.first, self.last)
@property
def fullname(self):
return "{} {}".format(self.first, self.last)
@fullname.setter
def fullname(self, name):
first, last = name.split(' ')
self.first = first
self.last = last
emp_1 = Employee('Pete', 'Tong')
emp_1.fullname = 'James Milner'
print emp_1.first
print(emp_1.first)
print(emp_1.email)
print(emp_1.fullname)
答案 0 :(得分:1)
问题在于您使用的是Python 2,而您的课程并未继承object
。您可以(a)使用Python 3,或(b)将类定义更改为:
class Employee(object):
可以在Python 2和Python 3中使用。
答案 1 :(得分:1)
您没有明确说明,但我怀疑您在仅适用于Python 3的功能上运行Python 2.
没有括号的print
意味着你使用Python 2运行它。setter
仅适用于Python 3.这也解释了另一个用户如何从代码中获取James
(在修好一张印刷品后)。
要在Python 2中修复此问题,您需要让您的班级继承全部母亲,object
:
class Employee(object):
Python3自动执行此操作; Python 2没有。
答案 2 :(得分:0)
为了使属性能够工作,你需要使用从对象继承的新样式类,所以像这样声明你的类,它会起作用
class Employee(object):
def __init__(self, first, last):
self.first = first
self.last = last
@property
def email(self):
return "{}.{}@email.com".format(self.first, self.last)
@property
def fullname(self):
return "{} {}".format(self.first, self.last)
@fullname.setter
def fullname(self, name):
first, last = name.split(' ')
self.first = first
self.last = last
emp_1 = Employee('Pete', 'Tong')
emp_1.fullname = 'James Milner'
print emp_1.first
print(emp_1.first)
print(emp_1.email)
print(emp_1.fullname)