如何从Python类中的其他参数初始化字符串属性?

时间:2012-08-20 05:07:57

标签: python class

我正在尝试两个连接到类args一起制作另一个。下面的代码将Name属性输出为tuple而不是字符串。

# 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属性保存到数据库,但是作为字符串,不要作为元组保存。

任何线索都太棒了!

3 个答案:

答案 0 :(得分: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'只是一个字符串。)

答案 1 :(得分:0)

现在,您在构造函数运行后明确将p.Name设置为元组值。特别是,当你运行

时,p.Name会丢失你在构造函数中给出的格式
p.Name = ("foo", "bar")

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

答案 2 :(得分:0)

如果你想:

  1. 将属性Name保留为字符串,
  2. 分配新Name,设置FirstnameLastname并将更改保存到db,
  3. 你应该重载该类的__setattr()__方法。

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