私は、Pythonに非常に新しいですし、現在は今サブクラス化namedtuple、__new__と__init__
のPython 3.4を使用しています、私はどうやら「namedtuple」をサブクラス化することにより、最高のカスタマイズされた不変オブジェクトを作成する方法を見つけ出すために私の頭を叩いています。
ここにエラーなしで動作するコードがありますが、私は親友のPyCharmからの警告メッセージが多すぎるので、正しく設定しているかどうかを調べるために私に設定されています。
from collections import namedtuple
class Aloe(namedtuple('Plant', [
'name',
'color',
'loveliness'
])):
def __new__(cls, params):
return super(Aloe, cls).__new__(
cls,
params.get('name'),
params.get('color'),
params.get('loveliness')
)
def __init__(self, params):
print(self.name)
super(Aloe, self).__init__()
私はそれを取得します。
>>> aloe = Aloe(params)
>>> print(aloe)
Aloe(name='aloey', color='green', loveliness='extreme')
警告の最初の
__new__
ブロックから来ます。
すべて私のparams.get('FIELD_NAME')
は、 '予期しない引数'と非難されています。私は、引数を削除する場合
おかしい事は、私はこの事は本当に私がしたいん何、
TypeError: __new__() missing 1 required positional argument:
を持っています!
警告の2番目は
__init__
ブロックから来ています。
super(Aloe, self).__init__()
は「パラメータ 『型名のために非難されたので、私は希望「型名」としてそれに良い'Plant'
を与えた
』を未充填」。それから私は得た、
TypeError: object.__init__() takes no parameters
(ノಠ益ಠ)ノ彡┻━┻戻るポイントへ
、
私のコードが動作しているが、私PyCharmから多数の警告を受け取ります。
PyCharmを満たすことができる方法はまったくありません。
だから、私は物事を処理するPython的方法を無視するかもしれないと心配です。私がいれば、私はいくつかのヒントを使うことができたらいいと思う。
:
データベースの行は常にが行辞書に正確に右の3つのキーが生成されます場合は、だけでも、直接
namedtuple
と上記**params
構文を使用し、ファクトリメソッドを気にしないでください私はなぜあなたが '__init__'メソッドを持っているのか疑問に思っていますが、そうでなければコードはうまく見えます。 PyCharmにコードが正常であると伝える方法についてのドキュメントを見つけて、次に進む。 –pycharmはあなたのコードが私には妥当ではないと言っています。なぜなら、 'Aloe = namedtuple( 'Aloe'、['name'、 'color'、 'loveliness'])の代わりに、 'アロエ=アロエ(**パラーム)'。 – Goyo
@ Goyo私は、データベースとの通信のためにサブクラスの下にさらにカスタマイズされたメソッドを配置したいので、namedtupleを拡張しようとしています。この場合、私が正しい方向に考えていると思いますか? –