π Π£ΠΊΡΡ ΠΏΠΈΡΠΎΠ½Π° π
ΠΡΠΊΡΡΡΡ Π² Telegram
π ΠΠ°Π½Π°Π» ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° ΡΠ·ΡΠΊΠ΅ Python. Π’Π΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠΎΠΊΠΈ ΠΈ Π»Π°ΠΉΡΡ Π°ΠΊΠΈ. π½ ΠΠ΄ΠΌΠΈΠ½ - @tg_adminisrator π ΠΡΠΏΠΈΡΡ ΡΠ΅ΠΊΠ»Π°ΠΌΡ: https://telega.in/c/byteofpython π Π§Π°Ρ: @abyteofpython π ΠΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ Ρ Π΄ΡΡΠ·ΡΡΠΌΠΈ: @byteofpython
ΠΠΎΠ»ΡΡΠ΅2 334
ΠΠΎΠ΄ΠΏΠΈΡΡΠΈΠΊΠΈ
ΠΠ΅Ρ Π΄Π°Π½Π½ΡΡ
24 ΡΠ°ΡΠ°
-117 Π΄Π½Π΅ΠΉ
-3730 Π΄Π½Π΅ΠΉ
ΠΡΡ
ΠΈΠ² ΠΏΠΎΡΡΠΎΠ²
π© ΠΠ°ΠΊΠΎΠ²Π° ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ getattr ΠΈ getattribute?
ΠΠ±Π° ΡΡΠΈΡ
ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠ²Π»ΡΡΡΡΡ ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ.
π
getattr
class Missing:
attr = 42
def getattr(self, name):
print(f"In getattr, asked for {name}")
return 73
m = Missing()
print(m.attr) # 42
print(m.xyz) # In getattr, asked for xyz; 73
ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° Π²ΡΡΠ΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠ° Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ° xyz.
πgetattribute
class Always:
attr = 42
def getattribute(self, name):
print(f"In getattribute, asked for {name}")
return 73
a = Always()
print(a.attr) # In getattribute, asked for attr; 73
print(a.xyz) # In getattribute, asked for xyz; 73
ΠΠ΄Π΅ΡΡ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π²ΡΠ΅Ρ
Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΠΊΠ°ΠΊ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ
(attr), ΡΠ°ΠΊ ΠΈ Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ
(xyz).
β
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, getattribute β ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π²ΡΠ΅ΠΌΠΈ Π·Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ getattr Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° getattribute Π½Π΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡ Π°ΡΡΠΈΠ±ΡΡ.βοΈΠΠ΅ΡΠΎΠ΄ subclasshook ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΊΠ»Π°ΡΡ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠΎΠΌ Π΄ΡΡΠ³ΠΎΠ³ΠΎ. ΠΠ½ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅
isinstance() ΠΈ issubclass() Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ.
β¬οΈΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠΈΡ
ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
ΠΊΠ»Π°ΡΡΠΎΠ².
β‘οΈΠΡΠΈΠΌΠ΅Ρ:
class A:
def init(self, value):
self.value = value
class B:
def init(self, value):
self.value = value
def subclasshook(cls, subclass):
return (hasattr(subclass, 'value') and
callable(subclass.value) and
subclacc.value.name == 'print_value')
class C:
def init(self, value):
self.value = value
def print_value(self):
print(self.value)
a = A(5)
b = B(10)
c = C(15)
# ΠΡΠΎΠ²Π΅ΡΠΊΠ°
print(issubclass(C, B)) # True
print(issubclass(A, B)) # False
β¬οΈΠ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ subclasshook ΠΊΠ»Π°ΡΡΠ° B ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π΅ΡΡΡ Π»ΠΈ Ρ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ° ΠΌΠ΅ΡΠΎΠ΄ print_value. ΠΡΠ»ΠΈ Π΄Π°, ΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ True, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΠΈΡΠ°ΡΡ Π΅Π³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠΎΠΌ B.ΠΡΠΎΠΊΠ°ΡΠ°ΠΉ ΡΠ²ΠΎΠΈ ΡΠΊΠΈΠ»Ρ Ρ ΠΠ»Π΅ΠΊΡΠ΅Π΅ΠΌ Π ΡΠ±Π°ΠΊΠΎΠΌ! π
ΠΠ°Π΄ΠΎΠ΅Π»ΠΈ ΡΠΊΡΡΠ½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ? π»
ΠΡΠ΅ΠΌΡ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° Π½ΠΎΠ²ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ!
πΠΡΠΈΠ³Π»Π°ΡΠ°Π΅ΠΌ Π±Π΅ΠΊΠ΅Π½Π΄Π΅ΡΠΎΠ² ΠΈ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΎΠ² ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Π½Π° ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΡΠ΅Ρ
ΠΌΠ΅ΡΡΡΠ½ΡΠΉ ΠΊΡΡΡ ΠΏΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΌΡ Π΄ΠΈΠ·Π°ΠΉΠ½Ρ ΠΈ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ΅ Π²ΡΡΠΎΠΊΠΎΠ½Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΡ
ΡΠΈΡΡΠ΅ΠΌ ΠΎΡ ΠΠ»Π΅ΠΊΡΠ΅Ρ Π ΡΠ±Π°ΠΊΠ°, Π³Π»Π°Π²Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Bumble/Badoo Ρ 20-Π»Π΅ΡΠ½ΠΈΠΌ ΠΎΠΏΡΡΠΎΠΌ Π² highload ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ.
Π ΡΠ΅ΠΌ ΡΠ΅Π½Π½ΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΊΡΡΡΠ°?
β
ΠΠ³Π½Π΅Π½Π½Π°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° Ρ ΠΏΠ΅ΡΠ²ΡΡ
Π΄Π½Π΅ΠΉ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΡΡ
ΠΊΠ΅ΠΉΡΠ°Ρ
ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅
β
ΠΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΠ΅ Β«ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΒ» Ρ
Π°ΠΉΠ»ΠΎΠ°Π΄ ΡΠΈΡΡΠ΅ΠΌ, ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΡΠ΅ΡΠ½ΠΎΠ² ΠΈ ΠΏΡΠΈΠ΅ΠΌΠΎΠ² ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
β
Π’ΠΎΠΏΠΎΠ²ΡΠ΅ ΡΠΈΡΠΊΠΈ ΠΈ Π·Π½Π°Π½ΠΈΡ ΠΏΠΎ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΌΡ Π΄ΠΈΠ·Π°ΠΉΠ½Ρ Π±ΠΎΠ»ΡΡΠΈΡ
ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² (1-100M DAU)
β
ΠΠΈΠ²ΡΠ΅ ΡΠ΅ΡΡΠΈΠΈ, Π±ΡΠ΅ΠΉΠ½ΡΡΠΎΡΠΌΡ, ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ βΡ Π΄ΠΎΡΠΊΠΈβ
ΠΠ° Π²ΡΡ
ΠΎΠ΄Π΅ Ρ Π²Π°Ρ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΎΠΏΡΡ:
β
ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ»ΠΎΠΆΠ½ΡΡ
ΡΠΈΡΡΠ΅ΠΌ
β
ΠΠ°Π³ΡΡΠ·ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ²ΠΎΠ΅ΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ (Π²ΡΠΆΠΌΠ΅ΡΠ΅ 100Π Π·Π°ΠΏΡΠΎΡΠΎΠ²)
β
ΠΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ
β
ΠΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ IT-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²
β
ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΎΠΏΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°ΠΌΠΈ Redis, CockroachDB ΠΈ ΡΠ°ΡΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ PostgreSQL/MySQL
β
Π ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅!
β‘οΈ Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠΉΡΡ ΠΈ ΠΏΠΎΠ³ΡΡΠΆΠ°ΠΉΡΡ Π² Π½Π΅ΡΠΊΡΡΠ½ΡΠΉ Ρ
Π°ΠΉΠ»ΠΎΠ°Π΄
Π Π΅ΠΊΠ»Π°ΠΌΠ° ΠΠ Π ΡΠ±Π°ΠΊ Π. Π. ΠΠΠ 771407709607
βοΈPython ΠΈΠΌΠ΅Π΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ
zipfile, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π°ΡΡ
ΠΈΠ²Π°ΠΌΠΈ ZIP. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ:
import zipfile
# Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ ZIP ΡΠ°ΠΉΠ»
with zipfile.ZipFile('Π½ΠΎΠ²ΡΠΉ_Π°ΡΡ
ΠΈΠ².zip', 'w') as new_zip:
# ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠ°ΠΉΠ»Ρ Π² Π°ΡΡ
ΠΈΠ²
new_zip.write('file1.txt')
new_zip.write('file2.txt')
# ΠΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ
β¬οΈΠΡΠΎΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΊΠΎΠ΄ ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ZIP Π°ΡΡ
ΠΈΠ² ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ_Π°ΡΡ
ΠΈΠ².zip ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π² Π½Π΅Π³ΠΎ ΡΠ°ΠΉΠ»Ρ file1.txt ΠΈ file2.txt.
β‘οΈΠΠΎΠ΄ΡΠ»Ρ zipfile ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΡΠΈΡΠΎΠΊΠΈΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ ΡΠ°ΠΉΠ»Ρ, ΡΠΈΡΠ°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π°ΡΡ
ΠΈΠ²Π°, Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΈ ΡΠ΄Π°Π»ΡΡΡ ΡΠ°ΠΉΠ»Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅. ΠΡΠΎ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π°ΡΡ
ΠΈΠ²Π°ΠΌΠΈ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ· ΠΊΠΎΠ΄Π° Python.ΠΡΠ»ΠΈ Π²Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΡΠ·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ ΠΌΠΎΠ΄ΡΠ»Π΅ zipfile ΠΈΠ»ΠΈ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ Π°ΡΡ
ΠΈΠ²Π°ΠΌΠΈ Π² Python, ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Python.