Python 获取或设置另一个类实例变量时,如何引用另一个类实例变量?
每个人都说要使用self.variable_name,但这只在获取或设置它的方法内部起作用。我需要能够在设置一个变量时使用实例中设置的其他变量的值Python 获取或设置另一个类实例变量时,如何引用另一个类实例变量?,python,python-3.x,class,getter-setter,instance-variables,Python,Python 3.x,Class,Getter Setter,Instance Variables,每个人都说要使用self.variable_name,但这只在获取或设置它的方法内部起作用。我需要能够在设置一个变量时使用实例中设置的其他变量的值 class WebSite: def __init__(self, url='', subdomain='www'): self.url = url self.subdomain = subdomain @property def url(self): return self
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
然后:
>>将包作为p导入
>>>site=p.网站()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/Users/dblack/Code/package/package/website.py”,第4行,在__
self.url=url
url中第13行的文件“/Users/dblack/Code/package/package/website.py”
self.uu url=f'http://{self.subdomain}.site.com'
子域中的第17行文件“/Users/dblack/Code/package/package/website.py”
返回self.\u子域
AttributeError:“网站”对象没有属性“\u网站\u子域”
我尝试了很多欺骗,这肯定是完全错误的方法。这当然是可能的,但您的代码具有相互关联的依赖关系。设置
url
属性将查找self.subdomain
,该属性调用subdomain
属性,该属性将依次查找尚不存在的self.\uu subdomain
的值
您至少应该首先设置self.subdomain
。但是,您应该重新考虑为子域
设置getter和setter;只需直接设置属性。无论哪种方式,您都应该避免使用双下划线前缀,因为这会造成名称混乱,并导致您可能无法预料的行为;如果必须设置隐藏属性,请使用一个下划线前缀。许多问题
- 将类成员
定义为属性,将实例成员url
定义为变量。实例成员在查找时隐藏类成员url
- 您可以访问
实例成员,而无需首先在构造函数中创建它。\uu url
- 为私有变量
定义一个普通getter和一个普通setter。如果您想要一个世界可写值,只需使用一个变量;Python不是Java\uu url
self.url
之前初始化self.subdomain
,因为url
的setter引用了self.subdomain。请注意,
url`的setter没有什么意义:它完全忽略了您给它的参数!你说得对。这是一个简单的例子,对不起!你为什么在这里使用双下划线的名称弄乱???@juanpa.arrivillaga我正在学习一门课程@jasonharper你是对的!这就解决了这个问题。。\uuuu url
不是问题所在,我相信它是。\uuu子域
。它仍然是不正确的,并且表明对发生的事情缺乏了解。我建议提出可能可行的最简单设计,使其可行,并从中进行改进。@9000我从您的评论中学到的python数量是不可低估的。非常感谢。
>>>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'