class DB:
_instance = None
def __new__(cls, *args, **kwargs):
if cls._instance:
return cls._instance
else:
new = object.__new__(cls)
cls._instance = new
return new
def __init__(self):
DBMixin._db = self
self.base = 'some_sqlite'
self.cur = 'some_sqlite_cursor'
def select(self):
return self.cur
def init_base(self, file_path):
self.base = file_path
class DBMixin:
_db: DB = None
def db_select(self):
return self._db.select()
class Foo(DBMixin):
def select_from_base(self):
return self.db_select()
if __name__ == '__main__':
base = DB()
bar = Foo()
print(bar.select_from_base())
print(bar.db_select())
# вот ответ, который заработал так, как надо
class Query:
def __init__(self, stack):
self.arr = stack
def __add__(self, query):
self.arr.extend(query.arr)
return self
def __str__(self):
return f"[ {' -> '.join([str(x) for x in self.arr])} ]"
qr_1 = Query([1, 2, 3]) #все так же, как и до этого, объект Query, id=0
qr_2 = qr_1 # осталось как и прежде, qr_2 и qr_1 ссылаются на id=0
print(id(qr_1), id(qr_2))
qr_1 = qr_1 + Query([10, 12])
# а вот тут, создается объект Query id=1, вызывается __add__ объекта по ссылке qr_1, то есть id=0
# и, возвращается self, тот же объект, у которого вызывался __add__, т.е. id=0
# присваиваем qr_1 ссылке с именем qr_1 объект с id=0
# id=1 уничтожается, так как на него никто не ссылается.
print(id(qr_1), id(qr_2)) #
print(qr_1) # [1 -> 2 -> 3 -> 10 -> 12]
print(qr_2) # [1 -> 2 -> 3]
1964106270472 1964106270472
1964106270472 1964106270472
[ 1 -> 2 -> 3 -> 10 -> 12 ]
[ 1 -> 2 -> 3 -> 10 -> 12 ]
Мне необходимо было изменение экземпляров- он ОДИН! один и тот же. и не свой экземпляр меняли, а экземпляр класса list, который содержится в поле вашего. Ваш - не поменялся.
после приравнивания одного экземпляра к другому первый изменялся вместе со вторым- как это представить?
x = int() # присваивание, связывание объекта типа int и ссылки под именем x
y = x # присваивание, связывание объекта типа int по ссылке x с ссылкой под именем y
# тут нет "присваивания одного экземпляра к другому", тут есть создание второй ссылки на один и тот же объект
можно ли как-то сделать мой класс изменяемым, он и так изменяемый, его поля можно поменять. Неизменяемая, например, строка, в строке нельзя поменять символ, можно только создать новую, измененную
self.combo.model().sort(0, 0) # после каждого addItem
# после каждого addItem- а зачем после каждого? Сортировка занимает время, если добавляется медленно, то да, если в цикле, например, то есть смысл вынести сортировку из цикла и вызвать один раз
import random
import sys
import string
from PySide2.QtCore import QSortFilterProxyModel, Qt
from PySide2.QtWidgets import QComboBox, QApplication
class Main(QComboBox):
def __init__(self):
super(Main, self).__init__()
self._symbol_list = "".join(
[string.ascii_uppercase, string.ascii_lowercase, string.digits]
)
for _ in range(10):
self.addItem(random.choice(self._symbol_list))
self.proxy_model = QSortFilterProxyModel()
self.proxy_model.setSourceModel(self.model())
self.proxy_model.setSortCaseSensitivity(Qt.CaseInsensitive) # именно setSortCaseSensitivity, не setFilterCaseSensitivity
self.model().setParent(self.proxy_model) # не забываем!
self.setModel(self.proxy_model)
self.proxy_model.sort(0)
if __name__ == "__main__":
app = QApplication(sys.argv)
main = Main()
main.show()
sys.exit(app.exec_())
(Threading, не QThread) сделал потому, что вис интерфейс pyqtиспользуете Qt, так используйте Qt. Если вис интерфейс - выполнение было не в потоке\еще какие-то косяки.
как избавиться от этого зависания во время sleep?- избавиться от sleep, нормально использовать QThread.
Читаем про классы, про self, и про то, что со всем этим делать