Python 고급 문법 4: 클래스 대상과 실례 대상의 접근 속성의 차이와property 속성
class Province(object):
#
country = ' '
def __init__(self, name):
#
self.name = name
#
obj = Province(' ')
#
print(obj.name)
#
Province.country
에 속한다. 상기 코드에서 알 수 있듯이 [실례 속성은 대상을 통해 접근해야 한다] [클래스 속성은 클래스를 통해 접근한다]. 사용에서 실례 속성과 클래스 속성의 귀속이 다르다는 것을 알 수 있다.class Foo(object):
def __init__(self, name):
self.name = name
def ord_func(self):
""" , self """
# print(self.name)
print(' ')
@classmethod
def class_func(cls):
""" , cls """
print(' ')
@staticmethod
def static_func():
""" , """
print(' ')
f = Foo(" ")
#
f.ord_func()
#
Foo.class_func()
#
Foo.static_func()
2. property 속성
dog.run
가 dog.eat()
class Dog(object):
def eat(self):
print(" ")
# property
@property
def run(self):
print(" ")
dog = Dog()
dog.eat() #
dog.run # property
보다 낫다. :dog.eat()
property :dog.run
class Goods:
@property
def price(self):
return "laowang"
# ############### ###############
obj = Goods()
result = obj.price # @property price ,
print(result)
# ############### ###############
class Goods:
"""python3 object
python2、3 , python3 @xxx.setter @xxx.deleter
"""
@property
def price(self):
print('@property')
@price.setter
def price(self, value):
print('@price.setter')
@price.deleter
def price(self):
print('@price.deleter')
# ############### ###############
obj = Goods()
obj.price # @property price ,
obj.price = 123 # @price.setter price , 123
del obj.price # @price.deleter price
주의class Goods(object):
def __init__(self):
#
self.original_price = 100
#
self.discount = 0.8
@property
def price(self):
# = *
new_price = self.original_price * self.discount
return new_price
@price.setter
def price(self, value):
self.original_price = value
@price.deleter
def price(self):
del self.original_price
obj = Goods()
obj.price #
obj.price = 200 #
del obj.price #
방식으로 창설property
할 때 클래식 클래스와 신식 클래스는 다를 것이 없다class Person:
def get_name(self):
return 'laowang'
BAR = property(get_name)
obj = Person()
reuslt = obj.BAR # get_bar ,
print(reuslt)
.
시 자동 트리거 실행 방법 . = XXX
시 자동 트리거 실행 방법del .
시 자동 트리거 실행 방법 . .__doc__
이며 이 파라미터는 이 속성의 설명 정보class Person(object):
def __init__(self,name):
self.name = name
def get_name(self):
return self.name
def set_name(self,new_name):
self.name = new_name
print(" :%s"%self.name)
def del_name(self):
del self.name
BAR = property(get_name,set_name,del_name," ...")
person = Person(" ")
person.BAR # :get_name
person.BAR = " " # :set_name , " "
person.del_name # :del_name
desc = Person.BAR.__doc__ # : ...
print(" :%s"%desc)
클래스 속성 방식으로property 속성을 만드는 데 3가지 접근 방식이 있기 때문에 우리는 그들의 몇 가지 속성의 접근 특징에 따라 각각 세 가지 방법을 같은 속성에 대해 정의할 수 있다. 얻기, 수정, 삭제, 다음과 같은 상품의 가격class Goods(object):
def __init__(self):
#
self.original_price = 100
#
self.discount = 0.8
def get_price(self):
# = *
new_price = self.original_price * self.discount
return new_price
def set_price(self, value):
self.original_price = value
def del_price(self):
del self.original_price
PRICE = property(get_price, set_price, del_price, ' ...')
obj = Goods()
obj.PRICE #
obj.PRICE = 200 #
del obj.PRICE #
class WSGIRequest(http.HttpRequest):
def __init__(self, environ):
script_name = get_script_name(environ)
path_info = get_path_info(environ)
if not path_info:
# Sometimes PATH_INFO exists, but is empty (e.g. accessing
# the SCRIPT_NAME URL without a trailing slash). We really need to
# operate as if they'd requested '/'. Not amazingly nice to force
# the path like this, but should be harmless.
path_info = '/'
self.environ = environ
self.path_info = path_info
self.path = '%s/%s' % (script_name.rstrip('/'), path_info.lstrip('/'))
self.META = environ
self.META['PATH_INFO'] = path_info
self.META['SCRIPT_NAME'] = script_name
self.method = environ['REQUEST_METHOD'].upper()
_, content_params = cgi.parse_header(environ.get('CONTENT_TYPE', ''))
if 'charset' in content_params:
try:
codecs.lookup(content_params['charset'])
except LookupError:
pass
else:
self.encoding = content_params['charset']
self._post_parse_error = False
try:
content_length = int(environ.get('CONTENT_LENGTH'))
except (ValueError, TypeError):
content_length = 0
self._stream = LimitedStream(self.environ['wsgi.input'], content_length)
self._read_started = False
self.resolver_match = None
def _get_scheme(self):
return self.environ.get('wsgi.url_scheme')
def _get_request(self):
warnings.warn('`request.REQUEST` is deprecated, use `request.GET` or '
'`request.POST` instead.', RemovedInDjango19Warning, 2)
if not hasattr(self, '_request'):
self._request = datastructures.MergeDict(self.POST, self.GET)
return self._request
@cached_property
def GET(self):
# The WSGI spec says 'QUERY_STRING' may be absent.
raw_query_string = get_bytes_from_wsgi(self.environ, 'QUERY_STRING', '')
return http.QueryDict(raw_query_string, encoding=self._encoding)
# ############### ###############
def _get_post(self):
if not hasattr(self, '_post'):
self._load_post_and_files()
return self._post
# ############### ###############
def _set_post(self, post):
self._post = post
@cached_property
def COOKIES(self):
raw_cookie = get_str_from_wsgi(self.environ, 'HTTP_COOKIE', '')
return http.parse_cookie(raw_cookie)
def _get_files(self):
if not hasattr(self, '_files'):
self._load_post_and_files()
return self._files
# ############### ###############
POST = property(_get_post, _set_post)
FILES = property(_get_files)
REQUEST = property(_get_request)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.