【发布时间】:2018-07-25 09:18:14
【问题描述】:
每个人都说要使用 self.variable_name ,但这仅在获取或设置它的方法内有效。设置一个时,我需要能够使用实例中设置的其他变量的值。
class WebSite:
def __init__(self, url='', subdomain='www'):
self.url = url
self.subdomain = subdomain
@property
def url(self):
return self.__url
@url.setter
def url(self, url):
self.__url = f'http://{self.subdomain}.example.com'
@property
def subdomain(self):
return self.__subdomain
@subdomain.setter
def subdomain(self, subdomain):
self.__subdomain = subdomain
然后:
>>>import package as p
>>>site = p.website()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/dblack/Code/package/package/website.py", line 4, in __init__
self.url = url
File "/Users/dblack/Code/package/package/website.py", line 13, in url
self.__url = f'http://{self.subdomain}.site.com'
File "/Users/dblack/Code/package/package/website.py", line 17, in subdomain
return self.__subdomain
AttributeError: 'WebSite' object has no attribute '_WebSite__subdomain'
我试了很多次,这一定是完全错误的做法。
【问题讨论】:
-
您需要在
self.url之前初始化self.subdomain,因为url的setter 引用self.subdomain. Note thaturl 的setter 并没有多大意义:它完全忽略你给它的参数! -
你是对的。这是一个精简的例子,对不起!
-
你为什么在这里使用双下划线名称修饰??
-
@juanpa.arrivillaga 我正在学习课程python-course.eu/python3_properties.php
-
@jasonharper 你是对的!解决了这个问题。
标签: python python-3.x class getter-setter instance-variables