__call__
в метаклассе этого класса. По умолчанию метакласс — type
. Этот type.__call__
управляет процессом создания экземпляра. Если метакласс переопределен, его __call__
будет использоваться вместо type.__call__
.type.__call__
вызывает __new__
класса__new__
type.__call__
вызывает __init__
класса. Если переопределен и возвращает объект другого типа, __init__
не вызывается, если того же - вызываетсяclass Test:
def __new__(cls, *args, **kwargs):
print("__new__")
return super().__new__(cls)
def __init__(self):
print("__init__")
test = Test()
выведет __new__
__init__
class Test:
def __new__(cls, *args, **kwargs):
print("__new__")
return 'test'
def __init__(self):
print("__init__")
test = Test()
только __new__
[] 0 <class 'list'>
['', ' Нужно ли пить флеботоники при тромбозе глубоких вен? ', ' ✓ ', ' ✓ ', 'https://actual-phlebology.ru/afpatient/nuzhno-li-pit-flebotoniki-pri-tromboze-glubokih-ven/', ' \n\nтромбы\n\n\nлекарства от варикоза\n\n\nпопулярные вопросы\n\n\nмифы о варикозе\n\n\n'] 6 <class 'list'>
['', ' Как болят артерии и вены? Подходы к лечению ', ' ✓ ', ' ✓ ', 'https://actual-phlebology.ru/afpatient/kak-bolyat-arterii-i-veny-podhody-k-lecheniyu/', ' \n\nболезни сосудов\n\n\nболи в ногах\n\n\n'] 6 <class 'list'>
['', ' Профессиональные отеки нижних конечностей и методы их коррекции ', ' ✓ ', ' ✓ ', 'https://actual-phlebology.ru/afpatient/professionalnye-oteki-nizhnih-konechnostey-i-metody-ih-korrektsii/', ' \n\nпрофилактика\n\n\nотеки\n\n\n'] 6 <class 'list'>
['', ' Как справиться с венозной болью? ', ' ✓ ', ' ✓ ', 'https://actual-phlebology.ru/afpatient/kak-spravitsya-s-venoznoy-bolyu/', ' \n\nпопулярные вопросы\n\n\nболи в ногах\n\n\nлечение варикоза без операции\n\n\n'] 6 <class 'list'>
['', ' Самодиагностика тромбоза, попытка самолечения ', ' ✓ ', ' ✓ ', 'https://actual-phlebology.ru/afpatient/samodiagnostika-tromboza-popytka-samolecheniya/', ' \n\nтромбы\n\n\n'] 6 <class 'list'>
['', ' Самая надежная и безболезненная операция на венах ', ' ✓ ', ' ✓ ', 'https://actual-phlebology.ru/afpatient/samaya-nadezhnaya-i-bezboleznennaya-operatsiya-na-venah/', ' \n\nсовременная хирургия варикоза\n\n\n'] 6 <class 'list'>
['', ' Тромбоз: чулок/гольф/ничего? ', ' ✓ ', ' ✓ ', 'https://actual-phlebology.ru/afpatient/tromboz-chulok-golf-nichego/', ' \n\nкомпрессионный трикотаж\n\n\nтромбы\n\n\n'] 6 <class 'list'>
['', ' Больные «внутренние вены» на ногах с избытком жировой клетчатки. ', ' ✓ ', ' ✓ ', 'https://actual-phlebology.ru/afpatient/bolnye-vnutrennie-veny-na-nogah-s-izbytkom-zhirovoy-kletchatki/', ' \n\nболи в ногах\n\n\nлипедема\n\n\n'] 6 <class 'list'>
['', ' Опасно ли закрывать клеем вены? ', ' ✓ ', ' ✓ ', 'https://actual-phlebology.ru/afpatient/opasno-li-zakryvat-kleem-veny/', ' \n\nмифы о варикозе\n\n\nспорт и болезни вен\n\n\n'] 6 <class 'list'>
['', ' Действительно эффективные упражнения при заболеваниях вен ', ' ✓ ', ' ✓ ', 'https://actual-phlebology.ru/afpatient/deystvitelno-effektivnye-uprazhneniya-pri-zabolevaniyah-ven/', ' \n\nпрофилактика\n\n\nмифы о варикозе\n\n\nспорт и болезни вен\n\n\n'] 6 <class 'list'>
и т. д.
[] 0 <class 'list'>
Это и вызывает ошибку по крайней мере раньше, exe-шник требовал, чтобы на компьютере было установлено еще что-то (напр. та же студия такой же версии).
установки каких-то дополнительных пакетов и сред на компьютер,Откуда вы это взяли? Чушь полнейшая. Максимум - несколько dll в придачу поставляется вместе с приложением, и всё (ну если вы, конечно, не программу управления полётами пишете).
Совсем хорошо, если для этой среды не понадобится искать рабочий кряк.Ну уж это совсем ни в какие ворота не лезет. Какие еще кряки? Вы из 90-х что ли прилетели?
import telebot
from telebot import types
import time
import works # Предполагается, что works теперь словарь
token = 'YOUR_TOKEN'
bot = telebot.TeleBot(token)
# Храним состояние и данные пользователей
user_data = {}
MAIN_MENU = 0
FIRST_WORK_MENU = 1
ADD_WORK_MENU = 2
@bot.message_handler(commands=['start'])
def start(message):
user_id = message.from_user.id
# Инициализация данных пользователя при старте
if user_id not in user_data:
user_data[user_id] = {
'state': MAIN_MENU,
'count_price': 0,
'count_all': 0
}
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
markup.add(" Главное меню", "ℹ️ Информация", "ℹ️️ начать подсчет зарплаты",
"ℹ️️ итог за месяц", "ℹ️ итог за все время")
bot.send_message(message.chat.id, "Добро пожаловать! Выберите пункт меню:", reply_markup=markup)
@bot.message_handler(content_types=['text'])
def handle_text(message):
user_id = message.from_user.id
# Инициализируем данные, если пользователь новый
if user_id not in user_data:
user_data[user_id] = {
'state': MAIN_MENU,
'count_price': 0,
'count_all': 0
}
current_user = user_data[user_id]
if message.text == " Главное меню":
# Код создания главного меню...
elif message.text == "ℹ️️ начать подсчет зарплаты":
# Код перехода в меню подсчета...
elif message.text == "добавление выполненых работ":
# Код меню добавления работ...
elif message.text == "ℹ️️ итог за месяц":
bot.send_message(message.chat.id, f'Сумма за месяц: {current_user["count_price"]} руб.')
elif message.text == "ℹ️ итог за все время":
bot.send_message(message.chat.id, f'Сумма за все время: {current_user["count_all"]} руб.')
elif message.text == "обнуление месяца/сохранение итогов":
current_user['count_all'] += current_user['count_price']
current_user['count_price'] = 0
bot.send_message(message.chat.id,
f'Месяц обнулен. Текущий месяц: 0 руб.\n'
f'Итог за все время: {current_user["count_all"]} руб.')
elif message.text in works: # Предполагается, что works - это словарь
price = works[message.text]
current_user['count_price'] += price
bot.send_message(message.chat.id,
f'{message.text}: {price} руб.\n'
f'Итог за месяц: {current_user["count_price"]} руб.')
bot.polling(none_stop=True)
kivy.require('2.0.0')
, а в конфиге kivy==2.1.0
. Вас это не смущает?buildozer init
и ничего не меняя запустите сборку. Потом попробуйте запустить.buildozer -v android debug deploy run logcat
Гугль и доки вам в помощьif platform == 'android':
storage_path = '/sdcard/fittrackpro'
else:
storage_path = os.path.dirname(os.path.abspath(__file__))
storage_path = App.get_running_app().user_data_dir
Window.size = (360, 640)
if not os.path.exists(storage_path):
os.makedirs(storage_path)
if not os.path.exists(storage_path):
os.makedirs(storage_path, exist_ok=True)
(или вообще уберите, и так должно работать)try:
from android.permissions import request_permissions, Permission
if platform == 'android':
request_permissions([
Permission.WRITE_EXTERNAL_STORAGE,
Permission.READ_EXTERNAL_STORAGE,
Permission.INTERNET
])
except: pass
pip install pyinstaller
pyinstaller -F /path/to/yourscript.py
C:\Users\<User>\AppData\Local\Programs\Python<version>\Lib\site-packages\pytubefix
__main__.py
check_availability
и убираете (просто удаляете) вот этот кусок кода:elif reason == (
'Sign in to confirm you’re not a bot'
):
raise exceptions.BotDetection(video_id=self.video_id)