Pythonのgetattr()とは
目標
Pythonのgetattr()関数について理解する。
getattr(Object, name [, default])
Return the value of the named attribute of object. name must be a string. If the string is the name of one of the object’s attributes, the result is the value of that attribute. For example,
Python document > library > functionsgetattr(x, 'foobar')
is equivalent tox.foobar
. If the named attribute does not exist, default is returned if provided, otherwiseAttributeError
is raised.
- この関数は、オブジェクトの指定した名前(name)の属性の値を返します。
- このnameは文字列でなければなりません。
- 例えば、getattr(x, ‘foobar’)はx.foobarと同じ値を返します。
- 指定された属性が存在しない場合は、defaultが用意されていればその値を、それ以外の場合はAttributeErrorが返されます。
実行例
サンプルコードです。Dogクラスは、name, ageというインスタンス変数を持ち、sit(), bark()というインスタンスメソッドを持ちます。
class Dog(): def __init__(self, name, age): self.name = name self.age = age def sit(self): self.tired = False print("sit down") def bark(self, count): self.tired = True for i in range(count): print("bow wow") dog1 = Dog("Poppy", 3) val1 = getattr(dog1, "name") val2 = getattr(dog1, "age") val3 = getattr(dog1, "tired", "unknown") val4 = getattr(dog1, "sit")() val5 = getattr(dog1, "bark")(2) val6 = getattr(dog1, "sit") val7 = getattr(dog1, "bark") val8 = getattr(dog1, "tired", "unknown")
属性の取得
インスタンス名と属性名を引数に与えることで インスタンス変数の値を取得できます。
# val1 = getattr(dog1, "name") print(val1) >> Poppy
# val2 = getattr(dog1, "age") print(val2) >> 3
Get default value
存在しないメソッドや変数を取得し用とした場合は、第三引数(default)に指定した値を返す。
# val3 = getattr(dog1, "tired", "unknown") print(val3) >> unknown
インスタンスメソッドの実行
インスタンスメソッドの実行、
# val4 = getattr(dog1, "sit")() print(val4) >> None
# val5 = getattr(dog1, "bark")(2) print(val5) >> None
インスタンスメソッドの取得
インスタンスメソッドを取得し、()を付けることで、メソッドを実行することができます。
# val6 = getattr(dog1, "sit") print(val6) >> <bound method Dog.sit of <__main__.Dog object at 0x7f192a93f1d0>> val6() >> sit down
取得したメソッドに引数を渡すこともできます。
# val7 = getattr(dog1, "bark") print(val7) >> <bound method Dog.bark of <__main__.Dog object at 0x7fb2169ae1d0>> val7(3) >> bow wow >> bow wow >> bow wow
メソッドを実行した後の変化
# val8 = getattr(dog1, "tired", "unknown") print(val8) >> True
先ほどはunknownだったインスタンス変数tiredの値が、getattr(dog1, bark)(2) によってTrueに変化しました。
GOAL
To understand getattr() function in python.
getattr(Object, name [, default])
Return the value of the named attribute of object. name must be a string. If the string is the name of one of the object’s attributes, the result is the value of that attribute. For example,
Python document > library > functionsgetattr(x, 'foobar')
is equivalent tox.foobar
. If the named attribute does not exist, default is returned if provided, otherwiseAttributeErro
r
is raised.
What will happen
class Dog(): def __init__(self, name, age): self.name = name self.age = age def sit(self): self.tired = False print("sit down") def bark(self, count): self.tired = True for i in range(count): print("bow wow") dog1 = Dog("Poppy", 3) val1 = getattr(dog1, "name") val2 = getattr(dog1, "age") val3 = getattr(dog1, "tired", "unknown") val4 = getattr(dog1, "sit")() val5 = getattr(dog1, "bark")(2) val6 = getattr(dog1, "sit") val7 = getattr(dog1, "bark") val8 = getattr(dog1, "tired", "unknown")
Get attribute
# val1 = getattr(dog1, "name") print(val1) >> Poppy
# val2 = getattr(dog1, "age") print(val2) >> 3
Get default value
# val3 = getattr(dog1, "tired", "unknown") print(val3) >> unknown
Execute function
# val4 = getattr(dog1, "sit")() print(val4) >> None
# val5 = getattr(dog1, "bark")(2) print(val5) >> None
Get function
# val6 = getattr(dog1, "sit") print(val6) >> <bound method Dog.sit of <__main__.Dog object at 0x7f192a93f1d0>> val6() >> sit down
# val7 = getattr(dog1, "bark") print(val7) >> <bound method Dog.bark of <__main__.Dog object at 0x7fb2169ae1d0>> val7(3) >> bow wow >> bow wow >> bow wow
After Executing function
# val8 = getattr(dog1, "tired", "unknown") print(val8) >> True
getattr(dog1, sit)() and getattr(dog1, bark)(2) changed internal variable “tired”.