私はPythonでOOPをうまく利用するために取り組んでいます。私が書いている1つのプログラムでは、本当にハッキリしています。それは動作しますが、それは混乱です。オブジェクトのコンテナを参照する方法
以下は、説明するための短いテスト例です。 0、2、または4つのウィンドウのカーをリストに作成し、最初の要素と残りのリストを比較します。
ファーストクラスの3番目の方法は、私が心配していることを示しています。私はちょうどパラメータから呼び出すことなく、特定のオブジェクトが入っているコンテナを毎回参照できるようにしたい。この例ではそれほど悪くはありませんが、私が取り組んでいることは、混乱し始めている場所が多岐にわたります。
import random
class Car:
def __init__ (self, company, doors, id):
self.company = company
self.doors = doors
self.id = id
def printDoors(self, id):
print 'Car ' + `self.id` + ' has ' + `self.doors` + ' doors.'
def findSameDoors(self, id):
# these next lines are the ones that really bother me
companyAbstract = self.company + 's'
for i in eval(companyAbstract):
if self.id != i.id and self.doors == i.doors:
print 'Car ' + `i.id` + ' does too!'
class Company:
def __init__ (self, types):
self.types = types
def typesToNum(self):
result = []
for i in self.types:
if i == 'sedan':
result.append(4)
elif i == 'convertible':
result.append(2)
else:
result.append(0)
return result
porsche = Company(['sedan', 'convertible'])
honda = Company(['sedan', 'convertible', 'motorcycle'])
porsches = []
for i in range(10):
porsches.append(Car('porsche', random.choice(porsche.typesToNum()), i))
hondas = []
for i in range(10):
hondas.append(Car('honda', random.choice(honda.typesToNum()), i))
porsches[0].printDoors(0)
porsches[0].findSameDoors(0)
場合によっては、RHELのPython 2.4.3が重要です。ありがとう!
['id()'はPythonの組み込み型](http://docs.python.org/library/functions.html#id)のように、識別子として 'id'を使うことに注意してください。窓がない車にも注意してください!ここで何をしようとしているのか(コンテナは何ですか?)、本当に明確ではありませんが、継承を探しているように見えます... – Johnsyweb
ここで最も明白なヒントをもっと知りたい場合は、 codereview.SEに。改善すべき*ロット*があります。 –
私は、同じドアを持つ車を見つける操作は、コレクションの操作であり、コレクションのメンバーではないと主張します。一般に、私はオブジェクトが過度にそれらがあるかもしれないコンテナを認識することを避けるでしょう。 –