1 はじめに
私は 5 年間 (2017 年から) Python でプログラミングをしてきましたが、人間の直感的な理解とは実際に異なる、Python の次のような珍しい使用法を最近まで知りませんでした。
さっそく始めましょう!
2. クラス内のプライベート変数は真のプライベート変数ではありません
次のように、例に直接進みましょう。
class Dog():
def __init__(self, name):
self.__name = name
@property
def name(self):
return self.__name
このDog
クラスでは、__name
プロパティにはgetter
メソッドがありますが、setter
メソッドはありません。一般的な理解によれば、ユーザーはメンバー関数を通じてプロパティの値をname()
読み取ることのみができるはずですが、オブジェクトの新しい名前を直接設定することはできません。しかし、そのプライベート変数はそれほどプライベートではありません。__name
Dog
dog = Dog("rocky")
print(dog.__dict__) # {
'_Dog__name': 'rocky'}
上に示したように、__dict__
クラスのプロパティにはオブジェクトのすべてのプロパティが含まれています。プロパティを使用すると__dict__
、どのプライベート変数やプロパティにアクセスすべきかを制御することもできます。
サンプルは次のとおりです。
dog.__dict__["_Dog__name"] = "fifi"
print(dog.name)
# fifi
3. Python での Infinity の使用法
無限を表すためにキーを使用しますinf
。コードは次のとおりです。
a = float("inf")
b = float("-inf")
print(a, b) # inf -inf
Python では無限に大きい (そして無限に小さい) 値を作成できます。表示可能な各値は、次のように inf より小さく、-inf より大きくなります。
print(10**100000 > float("inf")) # False
print(-(10**10000) < float("-inf")) # False
4. クラスをデコレータとして使用できます
誰かに挨拶する簡単な関数があるとします。
def hello(name):
return "hello " + name
print(hello("fifi")) # hello fifi
次のようにデコレータ クラスを作成し、hello 関数を定義するときにそれを使用しましょう。
class append():
def __init__(self, char):
self.char = char
def __call__(self, function):
def inner(*args):
return function(*args) + self.char
return inner
@append("!")
def hello(name):
return "hello " + name
print(hello("fifi")) # hello fifi!
関数上でデコレータを複数回使用することもできます。
@append("?")
@append("!")
def hello(name):
return "hello " + name
print(hello("fifi")) # hello fifi!?
5. 変数名に漢字が使用されている
ははは、Python では中国語の文字も変数名として使用できます。次に例を示します。
我 = 4
你 = 5
print(我 + 你) # 9
この機能を Python 言語で使用したことはありませんが、使用した場合はお知らせください。ただし、あまり役立つ知識ではありません(本当に同僚を困らせたくない場合を除く)。
6. eval() を使用して文字列内の Python コードを実行します
Python
組み込み関数を使用して、Python コードを文字列として実行できますeval()
。コードは次のとおりです。
x = 4
y = eval("x + 10")
print(y) # 14
より複雑な例は次のとおりです。
string = "print('hello world')"
eval(string) # prints hello world
string = "1+2+3"
eval(string) # returns 6
7. まとめ
私は最近まで Python におけるこれらの珍しい使用法について知りませんでした (おそらく知っているはずですが、知っています)。この記事があなたのお役に立てれば幸いです。