Функция property()
возвращает специальный объект дескриптора :
>>> property()
Этот метод имеет дополнительные методы:
]
>>> property().getter
>>> property().setter
>>> property().deleter
Они также действуют как декораторы . Они возвращают новый объект свойства:
>>> property().getter(None)
, который является копией старого объекта, но с одной из замененных функций.
Помните, что синтаксис @decorator
просто синтаксический сахар; синтаксис:
@property
def foo(self): return self._foo
действительно означает то же, что и
def foo(self): return self._foo
foo = property(foo)
, поэтому foo
функция заменяется на property(foo)
, что мы видели выше, это специальный объект , Затем, когда вы используете @foo.setter()
, то, что вы делаете, вызывает метод property().setter
, который я показал вам выше, который возвращает новую копию свойства, но на этот раз с заменой функции setter на декорированный метод.
Следующая последовательность также создает свойство full-on, используя эти методы декоратора.
Сначала мы создаем некоторые функции и объект property
только с помощью getter:
>>> def getter(self): print 'Get!'
...
>>> def setter(self, value): print 'Set to {!r}!'.format(value)
...
>>> def deleter(self): print 'Delete!'
...
>>> prop = property(getter)
>>> prop.fget is getter
True
>>> prop.fset is None
True
>>> prop.fdel is None
True
Далее мы используем метод .setter()
для добавления сеттера:
>>> prop = prop.setter(setter)
>>> prop.fget is getter
True
>>> prop.fset is setter
True
>>> prop.fdel is None
True
В последний раз мы добавили дебетер с методом .deleter()
:
>>> prop = prop.deleter(deleter)
>>> prop.fget is getter
True
>>> prop.fset is setter
True
>>> prop.fdel is deleter
True
Последнее, но не более того, объект property
действует как объект дескриптора , поэтому он имеет .__get__()
, .__set__()
и .__delete__()
, чтобы подключиться к атрибуту получения, установки и удаления атрибута экземпляра:
>>> class Foo(object): pass
...
>>> prop.__get__(Foo(), Foo)
Get!
>>> prop.__set__(Foo(), 'bar')
Set to 'bar'!
>>> prop.__delete__(Foo())
Delete!
В дескрипторе Howto реализована реализация образца чистого python образца типа property()
:
class Property(object): "Emulate PyProperty_Type() in Objects/descrobject.c" def __init__(self, fget=None, fset=None, fdel=None, doc=None): self.fget = fget self.fset = fset self.fdel = fdel if doc is None and fget is not None: doc = fget.__doc__ self.__doc__ = doc def __get__(self, obj, objtype=None): if obj is None: return self if self.fget is None: raise AttributeError("unreadable attribute") return self.fget(obj) def __set__(self, obj, value): if self.fset is None: raise AttributeError("can't set attribute") self.fset(obj, value) def __delete__(self, obj): if self.fdel is None: raise AttributeError("can't delete attribute") self.fdel(obj) def getter(self, fget): return type(self)(fget, self.fset, self.fdel, self.__doc__) def setter(self, fset): return type(self)(self.fget, fset, self.fdel, self.__doc__) def deleter(self, fdel): return type(self)(self.fget, self.fset, fdel, self.__doc__)
Вы видели запись в FAQ Что делать, если я за прокси? ?
... отредактируйте файл конфигурации «серверы», чтобы указать, какой прокси-сервер использовать. Местоположение файлов зависит от вашей операционной системы. В Linux или Unix он находится в каталоге «~ / .subversion». В Windows это «% APPDATA% \ Subversion». (Попробуйте «echo% APPDATA%», обратите внимание, что это скрытая директория.)
blockquote>Для меня это связано с раскомментированием и настройкой следующих строк:
#http-proxy-host=my.proxy #http-proxy-port=80 #http-proxy-username=[username] #http-proxy-password=[password]
Для этого существуют два общих подхода:
http-proxy-
в файле /etc/.subversion/servers или% APPDATA% \ Subversion \ servers , --config-option
, чтобы указать те же опции http-proxy-
в одной командной строке, которую вы запускаете. Например, svn checkout ^
--config-option servers:global:http-proxy-host=<PROXY-HOST> ^
--config-option servers:global:http-proxy-port=<PORT> <REPO-URL> <LWC-DIR>
Если вы находитесь в Windows, вы также можете записать http-proxy-
параметры в реестр Windows . Это очень удобно, если вам нужно применить настройки прокси-сервера в среде Active Directory с помощью объектов групповой политики.
alias svn-my-proxy='svn --config-option ...'
, чтобы иметь возможность использовать svn-my-proxy co http://svn/repo/trunk
. Это позволяет легко переключаться между конфигурациями прокси (svn-my-proxy co
) и no-proxy (svn co
) в зависимости от того, в какой сети ваша машина включена. Вы можете добавить команду alias
к вашему ~/.bashrc
, чтобы воссоздаваться при следующем входе в bash. Помогает мне много между моей рабочей сетью и моей домашней сетью!
– Drew Anderson
2 July 2015 в 10:11
В Windows 7 вам может потребоваться отредактировать этот файл
C: \ Users \ & lt; UserName & gt; \ AppData\roaming \ Subversion \ servers
[global]
http-proxy-host = ip.add.re.ss
http-proxy-port = 3128
Здесь вы можете найти инструкции . В основном вы просто добавляете
[global]
http-proxy-host = ip.add.re.ss
http-proxy-port = 3128
http-proxy-compression = no
в свой файл ~/.subversion/servers
.
В TortoiseSVN вы можете настроить прокси-сервер в разделе Настройки => Сеть
svn://
наhttp://
. – nikc 12 June 2014 в 19:28