[解決済み】TypeError:'type'オブジェクトはiterableではありません - オブジェクトインスタンスを繰り返し処理する。
2022-01-21 06:27:21
質問
あるプロジェクトで、クラスの1つを反復可能にしたいと思います。私の知る限りでは、メタクラスを使用することでそれが可能です。
まず、メタクラスがどのように機能するかを理解したいと思います。そこで、私自身の実践例として、Carクラスを作成した例を紹介したいと思います。ここでは、Carクラスのオブジェクトを反復可能にして、その名前をmain関数で表示するようにしたいと思います。
コード例は以下の通りです。
__author__ = 'mirind4'
class IterableCar(type):
def __iter__(self):
return iter(self.__name__)
class Car(object):
__metaclass__ = IterableCar
def __init__(self, name):
self.name = name
if __name__=='__main__':
car1 = Car('Mercedes')
car2 = Car('Toyota')
for cars in Car:
print (cars.name)
しかし、残念ながらTypeErrorが発生しました。
TypeError: 'type' object is not iterable
私のコードのどこに間違いがあるのか、親切に教えていただけませんか?今まで、このサイトやインターネット上で同じような問題質問をチェックしましたが、何が問題なのかわかりません。私はpython 3.4を使っています。 ありがとうございました。
どのように解決するのですか?
私の知る限り、メタクラスを使用してクラスオブジェクトを反復可能にすることはうまくいきます。
from __future__ import print_function
class IterableCar(type):
def __iter__(cls):
return iter(cls.__name__)
class Car(object):
__metaclass__ = IterableCar
def __init__(self, name):
self.name = name
if __name__=='__main__':
car1 = Car('Mercedes')
car2 = Car('Toyota')
for cars in Car:
print (cars)
結果が出る。
mgilson$ python ~/sandbox/test.py
C
a
r
実際に生成された車を追跡している例です。
from __future__ import print_function
import weakref
class IterableCar(type):
_cars = weakref.WeakSet()
def __iter__(cls):
return iter(cls._cars)
def add_car(cls, car):
cls._cars.add(car)
class Car(object):
__metaclass__ = IterableCar
def __init__(self, name):
self.__class__.add_car(self)
self.name = name
if __name__=='__main__':
car1 = Car('Mercedes')
car2 = Car('Toyota')
for cars in Car:
print (cars.name)
Python3.xを使用している場合、メタクラスを使用するために、あなたはそうすることに注意してください。
class Car(metaclass=IterableCar):
...
よりも、むしろ
class Car(object):
__metaclass__ = IterableCar
というメッセージが表示され、あなたが経験している問題を説明する可能性があります。
関連
-
PicgoのイメージベッドツールをPythonで実装する
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない
-
[解決済み] Pythonで、あるオブジェクトが反復可能かどうかを判断するにはどうしたらいいですか?
-
[解決済み] オブジェクトの種類を決定しますか?
-
[解決済み] TypeError: Python3でファイルへの書き込み時に'str'ではなくbytesのようなオブジェクトが要求される
-
[解決済み】forループを使った辞書の反復処理
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python call matlab メソッドの詳細
-
Python機械学習Githubが8.9Kstarsに達したモデルインタープリタLIME
-
Python百行で韓服サークルの画像クロールを実現する
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。