0

クラス引数に2つ一緒に結合して、別の引数を作成しようとしています。以下のコードは、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が、タプルとしてではなく文字列として保存したいと思います。

手がかりは素晴らしいでしょう!

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. Namenew 、setFirstnameを割り当てLastname、変更をdbに保存すると、

__setattr()__クラスのメソッドをオーバーロードする必要があります。

次に例を示します:http://code.activestate.com/recipes/389916-example-setattr-getattr-overloading/

于 2012-08-20T05:23:21.357 に答える