PythonのClassの実行する順番について
Pythonのクラスについてお聞きしたいのですが、クラス内のdefは上から順番に読み込まれていくのではないのでしょうか?
以下のようなプログラムがあります。
class API(Person):
def __init__(self, FBtoken):
# Facebookのトークンを元に、tinderのトークンを取得します。
params = {"token": FBtoken}
with requests.Session() as s:
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"}
s.headers.update(headers)
response = s.post(
"https://api.gotinder.com/v2/auth/login/facebook", data=json.dumps(params))
if response.status_code == 401: # 予期せぬトラブル
sys.exit(1)
data = json.loads(response.text)["data"]
self.id = data["_id"]
self.api_token = data["api_token"]
self.refresh_token = data["refresh_token"]
# Tinderのサーバーにリクエストするためのヘッダー。
self.header = {"X-Auth-Token": self.api_token, "Content-type": "application/json",
"User-agent": "Tinder/10.1.0 (iPhone; iOS 12.1; Scale/2.00)"}
# 自分の情報を取得します。
meta = self.getMeta()
# Personクラスを継承
super().__init__(meta["user"])
self.age_filter_max = meta["user"]["age_filter_max"]
self.age_filter_min = meta["user"]["age_filter_min"]
self.distance_filter = meta["user"]["distance_filter"]
self.gender_filter = meta["user"]["gender_filter"]
self.full_name = meta["user"]["full_name"]
# 自分の情報を取得
def getMeta(self):
endpoint = "meta"
return self._request(endpoint)
# 残り右スワイプ数
def getLikesRemaining(self):
return int(self.getMeta()["rating"]["likes_remaining"])
このプログラムではgetMeta関数が記述されている位置よりも上にあるのですが、通常の関数のみですと関数を実行するよりも上に関数を記述していないとエラーが出ると思うのですが、クラスではそれが起きないのでしょうか?
あともう一つ気になるのがClass API(Person):
と記述されており、これよりも上にPersonクラスが記述されています。
そしてこのクラスを利用する際、このような書き方がされています。api = tinpy.API(token)
この書き方でもPersonは継承されるのでしょうか?個人的なイメージでtokenに上書きされそうな気もします。ちなみにtokenにはFacebookのアクセストークンが入る予定です。
全体のコードは以下のGithubにあり、クラスを理解するために読んでいます。
https://github.com/FullteaOfEEIC/tinpy2