Why is the print statement in the class executed when an object isn't even created?












1














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")









share|improve this question





























    1














    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")









    share|improve this question



























      1












      1








      1







      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")









      share|improve this question















      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






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 22 at 18:59









      timgeb

      48.8k116390




      48.8k116390










      asked Nov 22 at 17:50









      user3124200

      704




      704
























          1 Answer
          1






          active

          oldest

          votes


















          7














          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





          share|improve this answer





















          • 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 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











          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
          });


          }
          });














          draft saved

          draft discarded


















          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









          7














          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





          share|improve this answer





















          • 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 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
















          7














          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





          share|improve this answer





















          • 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 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














          7












          7








          7






          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





          share|improve this answer












          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






          share|improve this answer












          share|improve this answer



          share|improve this answer










          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










          • @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










          • @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










          • @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










          • @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


















          draft saved

          draft discarded




















































          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.




          draft saved


          draft discarded














          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





















































          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







          Popular posts from this blog

          What visual should I use to simply compare current year value vs last year in Power BI desktop

          Alexandru Averescu

          Trompette piccolo