0
我定義我的Foo類爲:靜態成員變量沒有表現如預期 - Python的
class Foo(object):
# static member variables of the parent class Foo
is_logged = False
is_domain_set = False
def __init__(self, username, password):
# do something here.
def login(self, login_url):
# do the login ...
if self.login_successful():
self.is_logged = True
self.is_domain_set = True
# Output `True` as expected
self.log.info("is_logged: %s" % self.is_logged)
self.log.info("is_domain_set: %s" % self.is_domain_set)
return
class Bar(Foo):
# Foo is the parent class of Bar
super(Bar, self).__init__(username, password)
# Both are outputting `False` when it should be `True`
self.log.info("is_logged: %s" % self.is_logged)
self.log.info("is_domain_set: %s" % self.is_domain_set)
if not self.is_logged:
self.login(login_url)
那麼他們在另外一個類中使用,Baz
:
class Baz(oject):
def __init__(self, username, password, login):
# -- not important for the problem.
self.foo = Foo(username, password)
# login for auth purpose
if not self.foo.is_logged:
self.foo.login(login_url)
# Now use some of the objects of the `Bar` class, which
# will do its job:
self.bar = Bar(username, password)
程序流程就是這麼簡單。 Foo
用於登錄等一些基本操作,而Bar
用於其他特定操作。但是,我希望static
變量可以在base class
(每個類的一個實例)和它的child class
之間共享。目的是讓is_logged
和is_domain_set
的行爲類似於Singleton
。我究竟做錯了什麼?
表觀行爲是有一個爲Foo
,一個用於Bar
一個靜態變量,從Foo
即使Bar
繼承。但是,我試圖完成的是不同的。我想要Foo
和Bar
共享相同的靜態變量。一個選項(壞)是有一個全局變量,但我試圖做到這一點。
你想爲'is_logged_in'設置一個全局設置嗎?你能解釋你的用例嗎?這對我來說沒有意義。 –
@ Two-BitAlchemist:我希望他們在不使用全局變量的情況下共享'is_logged_in'。說得通? – cybertextron
這樣一次只能有一個用戶登錄?如果是這樣,我懷疑這是最好的辦法。 –