0

我正在尝试将两个加入 Class args 以制作另一个。下面的代码将Name属性输出为 atuple而不是字符串。

# Person
class Person(ParentClass):
    def __init__(self,
            Collection = 'People',
            Firstname = '',
            Lastname = '',
            Name = '',
            **kwargs):
        self.Collection = Collection
        self.Firstname = Firstname
        self.Lastname = Lastname
        self.Name = '%s %s' % (self.Firstname, self.Lastname),
        self.__dict__.update(kwargs)

p = Person(Firstname='Foo',Lastname='Bar')  ## tuple, not string

p.Name = ('Foo', 'Bar')

我试图在其中加入名字和姓氏__init__而不仅仅是一个属性的原因是因为__init__它与继承的save_to_database方法相关联。我希望将Name属性保存到数据库,但作为字符串,而不是作为元组。

任何线索都会很棒!

4

3 回答 3

4

删除结尾的逗号。转这个...

self.Name = '%s %s' % (self.Firstname, self.Lastname),

进入这个:

self.Name = '%s %s' % (self.Firstname, self.Lastname)

(你实际上是在做self.Name = 'foo',而不是self.Name = 'foo',并且'foo',是一个单元素元组,唯一的元素是一个字符串,而'foo'只是一个字符串。)

于 2012-08-20T05:12:26.667 回答
0

现在,您在构造函数运行后将 p.Name 显式设置为元组值。特别是, p.Name 会丢失您在运行时在构造函数中提供的格式

p.Name = ("foo", "bar")

现在您的 init 函数几乎可以正确设置 P.name 了。正如 Amber 指出的那样,您需要将逗号放在 self.Name = ... 行上。如果你解决这个问题,并删除你改变 self.Name 值的代码的最后一行,我认为它会做你想做的一切。

于 2012-08-20T05:22:07.707 回答
0

如果你想:

  1. 将属性保留Name为字符串,
  2. 在分配 new Name、 setFirstname并将Lastname更改保存到 db 时,

你应该重载__setattr()__类的方法。

这是一个例子:http ://code.activestate.com/recipes/389916-example-setattr-getattr-overloading/

于 2012-08-20T05:23:21.357 回答