LoginSignup
2
2

More than 3 years have passed since last update.

Python をはじめから覚える時ハマったポイントの覚書

Last updated at Posted at 2019-09-06

最近 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

以上です。

2
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2