Why is the print statement in the class executed when an object isn't even created?
When I run the code below the output is "hello".
However, the print
statement is part of the class pl
, and i never created an instance of the class pl
, so why is the print
statement being executed?
class pl:
def __init__(self,a,b):
self.aa=a
self.bb=b
print("hello")
python python-3.x class
add a comment |
When I run the code below the output is "hello".
However, the print
statement is part of the class pl
, and i never created an instance of the class pl
, so why is the print
statement being executed?
class pl:
def __init__(self,a,b):
self.aa=a
self.bb=b
print("hello")
python python-3.x class
add a comment |
When I run the code below the output is "hello".
However, the print
statement is part of the class pl
, and i never created an instance of the class pl
, so why is the print
statement being executed?
class pl:
def __init__(self,a,b):
self.aa=a
self.bb=b
print("hello")
python python-3.x class
When I run the code below the output is "hello".
However, the print
statement is part of the class pl
, and i never created an instance of the class pl
, so why is the print
statement being executed?
class pl:
def __init__(self,a,b):
self.aa=a
self.bb=b
print("hello")
python python-3.x class
python python-3.x class
edited Nov 22 at 18:59
timgeb
48.8k116390
48.8k116390
asked Nov 22 at 17:50
user3124200
704
704
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Class bodies (even nested class bodies) are executed at import time (as opposed to functions or methods).
Demo script:
class Upper:
print('Upper')
class Mid:
print('Mid')
def method(self):
class Low:
print('Low')
print('method')
Output:
$ python3
>>> import demo
Upper
Mid
Thanks! Does 'def method(self):' belong to class Mid or class Upper? Based on indentation i would say it belongs to upper, but it's below/within Mid so I'm confused. Also am I correct in saying that print('method') doesn't belong to class Low?
– user3124200
Nov 22 at 18:16
@user3124200method
is an attribute of the classUpper
.print('method')
is a print statement executed in the body ofmethod
, not in the body ofLow
. You can work this out by looking at the indentation levels.
– timgeb
Nov 22 at 18:38
@user3124200 did that clear everything up?
– timgeb
Nov 22 at 19:44
@timegb Thanks! I am confused on the following point though: 1) print('Upper') is executed as part of the Upper class and then 2) print('Mid') is executed as part of the Mid class and then 3) method is an attribute of the class upper. I'm confused at how the code jumps around from having statements belong to the upper class, then the mid class, and then the upper class again. Shouldn't everything defined within one class first & then within a nested class, and then within another sub class etc. How would you express the above code if python used curly brackets rather than indentation?
– user3124200
Nov 23 at 7:14
@user3124200 does this pseudo-code help?
– timgeb
Nov 23 at 9:31
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%2f53436098%2fwhy-is-the-print-statement-in-the-class-executed-when-an-object-isnt-even-creat%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
Class bodies (even nested class bodies) are executed at import time (as opposed to functions or methods).
Demo script:
class Upper:
print('Upper')
class Mid:
print('Mid')
def method(self):
class Low:
print('Low')
print('method')
Output:
$ python3
>>> import demo
Upper
Mid
Thanks! Does 'def method(self):' belong to class Mid or class Upper? Based on indentation i would say it belongs to upper, but it's below/within Mid so I'm confused. Also am I correct in saying that print('method') doesn't belong to class Low?
– user3124200
Nov 22 at 18:16
@user3124200method
is an attribute of the classUpper
.print('method')
is a print statement executed in the body ofmethod
, not in the body ofLow
. You can work this out by looking at the indentation levels.
– timgeb
Nov 22 at 18:38
@user3124200 did that clear everything up?
– timgeb
Nov 22 at 19:44
@timegb Thanks! I am confused on the following point though: 1) print('Upper') is executed as part of the Upper class and then 2) print('Mid') is executed as part of the Mid class and then 3) method is an attribute of the class upper. I'm confused at how the code jumps around from having statements belong to the upper class, then the mid class, and then the upper class again. Shouldn't everything defined within one class first & then within a nested class, and then within another sub class etc. How would you express the above code if python used curly brackets rather than indentation?
– user3124200
Nov 23 at 7:14
@user3124200 does this pseudo-code help?
– timgeb
Nov 23 at 9:31
add a comment |
Class bodies (even nested class bodies) are executed at import time (as opposed to functions or methods).
Demo script:
class Upper:
print('Upper')
class Mid:
print('Mid')
def method(self):
class Low:
print('Low')
print('method')
Output:
$ python3
>>> import demo
Upper
Mid
Thanks! Does 'def method(self):' belong to class Mid or class Upper? Based on indentation i would say it belongs to upper, but it's below/within Mid so I'm confused. Also am I correct in saying that print('method') doesn't belong to class Low?
– user3124200
Nov 22 at 18:16
@user3124200method
is an attribute of the classUpper
.print('method')
is a print statement executed in the body ofmethod
, not in the body ofLow
. You can work this out by looking at the indentation levels.
– timgeb
Nov 22 at 18:38
@user3124200 did that clear everything up?
– timgeb
Nov 22 at 19:44
@timegb Thanks! I am confused on the following point though: 1) print('Upper') is executed as part of the Upper class and then 2) print('Mid') is executed as part of the Mid class and then 3) method is an attribute of the class upper. I'm confused at how the code jumps around from having statements belong to the upper class, then the mid class, and then the upper class again. Shouldn't everything defined within one class first & then within a nested class, and then within another sub class etc. How would you express the above code if python used curly brackets rather than indentation?
– user3124200
Nov 23 at 7:14
@user3124200 does this pseudo-code help?
– timgeb
Nov 23 at 9:31
add a comment |
Class bodies (even nested class bodies) are executed at import time (as opposed to functions or methods).
Demo script:
class Upper:
print('Upper')
class Mid:
print('Mid')
def method(self):
class Low:
print('Low')
print('method')
Output:
$ python3
>>> import demo
Upper
Mid
Class bodies (even nested class bodies) are executed at import time (as opposed to functions or methods).
Demo script:
class Upper:
print('Upper')
class Mid:
print('Mid')
def method(self):
class Low:
print('Low')
print('method')
Output:
$ python3
>>> import demo
Upper
Mid
answered Nov 22 at 17:53
timgeb
48.8k116390
48.8k116390
Thanks! Does 'def method(self):' belong to class Mid or class Upper? Based on indentation i would say it belongs to upper, but it's below/within Mid so I'm confused. Also am I correct in saying that print('method') doesn't belong to class Low?
– user3124200
Nov 22 at 18:16
@user3124200method
is an attribute of the classUpper
.print('method')
is a print statement executed in the body ofmethod
, not in the body ofLow
. You can work this out by looking at the indentation levels.
– timgeb
Nov 22 at 18:38
@user3124200 did that clear everything up?
– timgeb
Nov 22 at 19:44
@timegb Thanks! I am confused on the following point though: 1) print('Upper') is executed as part of the Upper class and then 2) print('Mid') is executed as part of the Mid class and then 3) method is an attribute of the class upper. I'm confused at how the code jumps around from having statements belong to the upper class, then the mid class, and then the upper class again. Shouldn't everything defined within one class first & then within a nested class, and then within another sub class etc. How would you express the above code if python used curly brackets rather than indentation?
– user3124200
Nov 23 at 7:14
@user3124200 does this pseudo-code help?
– timgeb
Nov 23 at 9:31
add a comment |
Thanks! Does 'def method(self):' belong to class Mid or class Upper? Based on indentation i would say it belongs to upper, but it's below/within Mid so I'm confused. Also am I correct in saying that print('method') doesn't belong to class Low?
– user3124200
Nov 22 at 18:16
@user3124200method
is an attribute of the classUpper
.print('method')
is a print statement executed in the body ofmethod
, not in the body ofLow
. You can work this out by looking at the indentation levels.
– timgeb
Nov 22 at 18:38
@user3124200 did that clear everything up?
– timgeb
Nov 22 at 19:44
@timegb Thanks! I am confused on the following point though: 1) print('Upper') is executed as part of the Upper class and then 2) print('Mid') is executed as part of the Mid class and then 3) method is an attribute of the class upper. I'm confused at how the code jumps around from having statements belong to the upper class, then the mid class, and then the upper class again. Shouldn't everything defined within one class first & then within a nested class, and then within another sub class etc. How would you express the above code if python used curly brackets rather than indentation?
– user3124200
Nov 23 at 7:14
@user3124200 does this pseudo-code help?
– timgeb
Nov 23 at 9:31
Thanks! Does 'def method(self):' belong to class Mid or class Upper? Based on indentation i would say it belongs to upper, but it's below/within Mid so I'm confused. Also am I correct in saying that print('method') doesn't belong to class Low?
– user3124200
Nov 22 at 18:16
Thanks! Does 'def method(self):' belong to class Mid or class Upper? Based on indentation i would say it belongs to upper, but it's below/within Mid so I'm confused. Also am I correct in saying that print('method') doesn't belong to class Low?
– user3124200
Nov 22 at 18:16
@user3124200
method
is an attribute of the class Upper
. print('method')
is a print statement executed in the body of method
, not in the body of Low
. You can work this out by looking at the indentation levels.– timgeb
Nov 22 at 18:38
@user3124200
method
is an attribute of the class Upper
. print('method')
is a print statement executed in the body of method
, not in the body of Low
. You can work this out by looking at the indentation levels.– timgeb
Nov 22 at 18:38
@user3124200 did that clear everything up?
– timgeb
Nov 22 at 19:44
@user3124200 did that clear everything up?
– timgeb
Nov 22 at 19:44
@timegb Thanks! I am confused on the following point though: 1) print('Upper') is executed as part of the Upper class and then 2) print('Mid') is executed as part of the Mid class and then 3) method is an attribute of the class upper. I'm confused at how the code jumps around from having statements belong to the upper class, then the mid class, and then the upper class again. Shouldn't everything defined within one class first & then within a nested class, and then within another sub class etc. How would you express the above code if python used curly brackets rather than indentation?
– user3124200
Nov 23 at 7:14
@timegb Thanks! I am confused on the following point though: 1) print('Upper') is executed as part of the Upper class and then 2) print('Mid') is executed as part of the Mid class and then 3) method is an attribute of the class upper. I'm confused at how the code jumps around from having statements belong to the upper class, then the mid class, and then the upper class again. Shouldn't everything defined within one class first & then within a nested class, and then within another sub class etc. How would you express the above code if python used curly brackets rather than indentation?
– user3124200
Nov 23 at 7:14
@user3124200 does this pseudo-code help?
– timgeb
Nov 23 at 9:31
@user3124200 does this pseudo-code help?
– timgeb
Nov 23 at 9:31
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%2f53436098%2fwhy-is-the-print-statement-in-the-class-executed-when-an-object-isnt-even-creat%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