Why it only realize the last instance when using python singleton pattern
the code is in belows:
class A(object):
__instance = None
def __new__(cls, *args, **kwargs):
if cls.__instance is None:
cls.__instance = object.__new__(cls)
return cls.__instance
else:
return cls.__instance
def __init__(self, book):
self.book = book
def pr(self):
print(self.book)
if __name__ == "__main__":
b = A("wind")
a = A("good")
print(a is b)
print(a.pr())
print(b.pr())
the result is
True
good
None
good
None
why the result is not:
True
wind
good
where is wrong with the code?
python singleton
add a comment |
the code is in belows:
class A(object):
__instance = None
def __new__(cls, *args, **kwargs):
if cls.__instance is None:
cls.__instance = object.__new__(cls)
return cls.__instance
else:
return cls.__instance
def __init__(self, book):
self.book = book
def pr(self):
print(self.book)
if __name__ == "__main__":
b = A("wind")
a = A("good")
print(a is b)
print(a.pr())
print(b.pr())
the result is
True
good
None
good
None
why the result is not:
True
wind
good
where is wrong with the code?
python singleton
Ita
isb
how shouldpr()
return different values?
– Klaus D.
Nov 23 '18 at 2:51
The wind is the first instance. Why it notTrue wind wind
,
– littlely
Nov 23 '18 at 2:56
add a comment |
the code is in belows:
class A(object):
__instance = None
def __new__(cls, *args, **kwargs):
if cls.__instance is None:
cls.__instance = object.__new__(cls)
return cls.__instance
else:
return cls.__instance
def __init__(self, book):
self.book = book
def pr(self):
print(self.book)
if __name__ == "__main__":
b = A("wind")
a = A("good")
print(a is b)
print(a.pr())
print(b.pr())
the result is
True
good
None
good
None
why the result is not:
True
wind
good
where is wrong with the code?
python singleton
the code is in belows:
class A(object):
__instance = None
def __new__(cls, *args, **kwargs):
if cls.__instance is None:
cls.__instance = object.__new__(cls)
return cls.__instance
else:
return cls.__instance
def __init__(self, book):
self.book = book
def pr(self):
print(self.book)
if __name__ == "__main__":
b = A("wind")
a = A("good")
print(a is b)
print(a.pr())
print(b.pr())
the result is
True
good
None
good
None
why the result is not:
True
wind
good
where is wrong with the code?
python singleton
python singleton
edited Nov 23 '18 at 2:57
asked Nov 23 '18 at 2:43
littlely
224314
224314
Ita
isb
how shouldpr()
return different values?
– Klaus D.
Nov 23 '18 at 2:51
The wind is the first instance. Why it notTrue wind wind
,
– littlely
Nov 23 '18 at 2:56
add a comment |
Ita
isb
how shouldpr()
return different values?
– Klaus D.
Nov 23 '18 at 2:51
The wind is the first instance. Why it notTrue wind wind
,
– littlely
Nov 23 '18 at 2:56
It
a
is b
how should pr()
return different values?– Klaus D.
Nov 23 '18 at 2:51
It
a
is b
how should pr()
return different values?– Klaus D.
Nov 23 '18 at 2:51
The wind is the first instance. Why it not
True wind wind
,– littlely
Nov 23 '18 at 2:56
The wind is the first instance. Why it not
True wind wind
,– littlely
Nov 23 '18 at 2:56
add a comment |
1 Answer
1
active
oldest
votes
for each time of call A()
, its __init__
will be invoked, as it is a singleton, the __init__()
method invoked twice on the same object.
you could get your expected result with:
b = A("wind")
b.pr()
a = A("good")
a.pr()
print(a is b)
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53440063%2fwhy-it-only-realize-the-last-instance-when-using-python-singleton-pattern%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
for each time of call A()
, its __init__
will be invoked, as it is a singleton, the __init__()
method invoked twice on the same object.
you could get your expected result with:
b = A("wind")
b.pr()
a = A("good")
a.pr()
print(a is b)
add a comment |
for each time of call A()
, its __init__
will be invoked, as it is a singleton, the __init__()
method invoked twice on the same object.
you could get your expected result with:
b = A("wind")
b.pr()
a = A("good")
a.pr()
print(a is b)
add a comment |
for each time of call A()
, its __init__
will be invoked, as it is a singleton, the __init__()
method invoked twice on the same object.
you could get your expected result with:
b = A("wind")
b.pr()
a = A("good")
a.pr()
print(a is b)
for each time of call A()
, its __init__
will be invoked, as it is a singleton, the __init__()
method invoked twice on the same object.
you could get your expected result with:
b = A("wind")
b.pr()
a = A("good")
a.pr()
print(a is b)
answered Nov 23 '18 at 3:57
georgexsh
10.1k11136
10.1k11136
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53440063%2fwhy-it-only-realize-the-last-instance-when-using-python-singleton-pattern%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
It
a
isb
how shouldpr()
return different values?– Klaus D.
Nov 23 '18 at 2:51
The wind is the first instance. Why it not
True wind wind
,– littlely
Nov 23 '18 at 2:56