Скремблирование имени используется, чтобы гарантировать, чтобы подклассы случайно не переопределяли закрытые методы и атрибуты их суперклассов. Это не разработано для предотвращения преднамеренного доступа снаружи.
, Например:
>>> class Foo(object):
... def __init__(self):
... self.__baz = 42
... def foo(self):
... print self.__baz
...
>>> class Bar(Foo):
... def __init__(self):
... super(Bar, self).__init__()
... self.__baz = 21
... def bar(self):
... print self.__baz
...
>>> x = Bar()
>>> x.foo()
42
>>> x.bar()
21
>>> print x.__dict__
{'_Bar__baz': 21, '_Foo__baz': 42}
, Конечно, это ломается, если два различных класса имеют то же имя.
вы можете использовать модули API python win32, например,
import win32file
win32file.CreateSymbolicLink(srcDir, targetDir, 1)
см. http://docs.activestate.com/activepython/2.5/pywin32/win32file__CreateSymbolicLink_meth.html для получения дополнительных сведений
если вы тоже не хотите полагаться на это, вы всегда можете использовать ctypes и напрямую вызвать CreateSymbolicLinl Win32 API, который в любом случае является простым вызовом
вот пример вызова с использованием ctypes
import ctypes
kdll = ctypes.windll.LoadLibrary("kernel32.dll")
kdll.CreateSymbolicLinkA("d:\testdir", "d:\testdir_link", 1)
MSDN говорит Минимум поддерживаемый клиент Windows Vista
Вы не хотите полагаться на внешние инструменты, но не против полагаться на конкретную среду? Я думаю, вы можете с уверенностью предположить, что, если вы используете NTFS, утилита junction, вероятно, будет там.
Но, если вы имеете в виду, что не хотите вызывать внешнюю программу, я обнаружил ctypes бесценный материал. Он позволяет вызывать библиотеки DLL Windows прямо из Python. И я почти уверен, что в настоящее время он входит в стандартные выпуски Python.
Вам просто нужно выяснить, в какой Windows DLL используется вызов API CreateJunction ()
(или как там это называется в Windows) и настраиваем параметры и звоним. Желаю удачи, Microsoft, похоже, не очень хорошо поддерживает это.