最近 Selenium を触るために、Python を覚えているのですが、学んでいて、ハマってしまったポイントを覚書しておきます。
(ハマったポイントがまたあれば随時書き足していきたいと思います。)
落1. 配列(list)は、任意の数値インデックスに要素を加えられない
Pythonでは、任意の数値インデックスに要素を加えられませんでした。
(直近良く触っていたPHPでは任意のインデックスに要素を加えられますが、これはPHPのarray が全て連想配列となっているからなので、別の言語ではあまり一般的ではないのかもしれません。)
PHPの場合
<?php
$mylist = []
$mylist[12] = 'dummyData' // index:12の要素に値を設定する。
Pythonの場合
mylist = list()
for i in range(0, 13):
mylist.insert(i, None) # listのindexの初期化
mylist[12] = 'dummyData' # index:12の要素に値を設定する。
20190907 01:13 追記 コメントを頂きまして、下記のコードでlist の初期化ができるようでした。(配列の初期化の仕方も演算子を使えるのがPythonっぽいなと思いました。)
mylist = [None] * 13 # listのindexの初期化
mylist[12] = 'dummyData' # index:12の要素に値を設定する。
落2. 事象:配列の最終列が参照できない
配列の最終列が参照できないという事象が起こったのですが、原因はlistのカラム数を初期化していた処理で for i in range(0, Max)
がMaxを含めないことが原因でした。
mylist = list()
maxColNo = 6
for i in range(0, maxColNo):
mylist.insert(i, None) #初期化 mylist[0]-mylist[5]ができる
mylist[maxColNo] = 'dummyData' # mylist[6] が存在せず落ちていた。
落3. 親クラスのプライベートメソッドを継承できない
python は親クラスのプライベートメソッドは継承出来ませんでした。
class Foo(object)
def __getFoo(self):
return 'Foo'
class BarFoo(Foo):
def getBarFoo(self)
return self.__getFoo() + 'bar' # Error
# self.__getFoo()はプライベートなメソッドのため呼び出せない。
追記20190907 01:24 こちらコメントを頂きまして、厳密には__getFoo
というFoo
クラスのメソッドは、子クラスBarFoo
に読み込まれた際、マングリングという処理で、_BarFoo__getFoo
というメソッドで子クラスに渡るため、子クラスからself.__getFoo
の参照ができなくなること理解いたしました。
https://docs.python.org/ja/3/tutorial/classes.html#private-variables
以上です。