Как обернуть экземпляры классов, но сохранить доступ к атрибутам, как если бы они были развернуты, например pathlib.PathPython

Программы на Python
Anonymous
Как обернуть экземпляры классов, но сохранить доступ к атрибутам, как если бы они были развернуты, например pathlib.Path

Сообщение Anonymous »

Есть ли способ обернуть экземпляры классов друг вокруг друга, как показано ниже, столько раз, сколько необходимо, сохраняя при этом доступ к атрибутам, как если бы они были развернуты?

Код: Выделить всё

class MyPath:
def __init__(self, path=None):
self.path = path

print(MyPath('my/file/path.txt').path)
# my/file/path.txt

print(MyPath(MyPath('my/file/path.txt')).path)
# 
pathlib.Path использует это, но я не смог понять это из исходного кода.
Одна из упрощенных возможностей:

Код: Выделить всё

class MyPath:
def __init__(self, instance_or_path=None):
self._instance_or_path = instance_or_path

@property
def path(self):
if isinstance(self._instance_or_path, MyPath):
return self._instance_or_path.path
return self._instance_or_path
Но я подумал, что может быть лучший способ, который не требует проверки типов.
Изменить: приведенное выше решение или утиный набор текста. Вариант, опубликованный @Andr0id16, подходит, если класс содержит только очень ограниченное количество атрибутов, но в противном случае он кажется мне неуклюжим, поскольку проверку типа или попытку/исключение придется включать для каждого из них.

Подробнее здесь: https://stackoverflow.com/questions/786 ... rapped-lik

Вернуться в «Python»