为什么我的.split('')不起作用?

时间:2017-11-28 17:58:43

标签: python split

我一直在尝试覆盖对象“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)

3 个答案:

答案 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)