• Eager Eagle@lemmy.world
    link
    fedilink
    English
    arrow-up
    81
    ·
    6 months ago

    nah, I’m never complaining about self in Python after having tried the this and that nonsense in JS.

    oh, you’re using a named function instead of an arrow fn? Guess what, this is not what it used to be anymore.

    • unalivejoy@lemmy.zip
      link
      fedilink
      arrow-up
      20
      ·
      6 months ago

      Oh, you assigned a method to a variable before calling it? Congratulations, this is now undefined.

      • pinball_wizard@lemmy.zip
        link
        fedilink
        arrow-up
        4
        ·
        6 months ago

        Yes. There’s no telling what this is. this could be anything. We tried to keep track of this, but no one knows when this will change.

        • unalivejoy@lemmy.zip
          link
          fedilink
          arrow-up
          7
          ·
          6 months ago

          I used to be with this, but then they changed what this was.

          Now what I’m with isn’t this, and what’s this seems weird and scary to me.

          This’ll happen to you!

    • dufkm@lemmy.world
      link
      fedilink
      English
      arrow-up
      5
      arrow-down
      1
      ·
      6 months ago

      As a non-programmer who’s occasionally dabbled with wxPython, I’ve entangled myself with self.parent.parent and their childs/siblings more than once. At that stage I know my project is done.

  • mesa@piefed.social
    link
    fedilink
    English
    arrow-up
    29
    ·
    6 months ago

    Explicit vs implicit. Ive always liked it being explicit like that. It’s better than magic keywords in say ruby.

    Personally the “spaces are code” gets on my nerves for the same reason. It’s implicit to the language so you just have to remember.

    • Albbi@piefed.caOP
      link
      fedilink
      English
      arrow-up
      5
      ·
      6 months ago

      Write a new method, make sure to reference self first. Write a new method, make sure to reference self first. Call the method, make sure to reference self first.

      Yeah, I can see it.

      • amos@lemmy.zip
        link
        fedilink
        English
        arrow-up
        5
        ·
        6 months ago

        You don’t reference self when calling a method, what on earth are you talking about? You start with the instance when calling the method, like most/all other OOP languages.

        Also there are benefits with the explicit self/this to access instance properties. In C++ you need to make sure all class properties/members have a naming scheme that does not conflict with potential parameter names or other names of other variables.

    • GreenKnight23@lemmy.world
      link
      fedilink
      arrow-up
      6
      arrow-down
      25
      ·
      6 months ago

      that’s because anyone who develops oop in Python is mentally ill.

      Python is a scripting language, not to be confused with an actual programming language. Like everything else in development over the last decade, newbs are just shoehorning whatever is hot into the language because nobody is stopping them.

      • dejected_warp_core@lemmy.world
        link
        fedilink
        arrow-up
        1
        ·
        6 months ago

        that’s because anyone who develops oop in Python is mentally ill.

        Hard disagree there. I would argue that most “multi-paradigm” languages converge on the same features, given enough time to iterate. It’s not necessarily about hot-sauce. I honestly think its about utility and meeting your userbase where their heads are.

        • GreenKnight23@lemmy.world
          link
          fedilink
          arrow-up
          1
          arrow-down
          1
          ·
          6 months ago

          I honestly think its about utility and meeting your userbase where their heads are.

          then the Python userbase must have their heads shoved up their ass.

      • Albbi@piefed.caOP
        link
        fedilink
        English
        arrow-up
        3
        arrow-down
        4
        ·
        6 months ago

        You’re right in that OOP feels very shoehorned in with Python. But not every project has a Linus Torvalds to publicly humiliate horrible ideas and implementations.

        • fruitcantfly@programming.dev
          link
          fedilink
          arrow-up
          6
          ·
          6 months ago

          In what way does OOP feel shoehorned in with Python? I ask since that is not my own impression of the language.

          Would you also be willing to share what language(s) you feel do(es) OOP without it being shoehorned in?

          • amos@lemmy.zip
            link
            fedilink
            English
            arrow-up
            4
            ·
            6 months ago

            Yeah, some weird accusations. Python has had classes since its inception (1.0).

            Also the image in the post makes no sense. It shows multiple (Spidey) instances all pointing to each other which is not how self works. self is just a parameter that may contain different instances depending how it was called. This is also true for any other parameters in any function, each time a function is called it may have a different instance.

          • Albbi@piefed.caOP
            link
            fedilink
            English
            arrow-up
            1
            ·
            5 months ago

            I was looking to see if there are equivalents to Java’s private and protected members, and it looks like Python’s answer to that is just throw one or two underscores in front of things to do that. And it doesn’t really do anything, more of just a naming convention. To me that feels like a basic OO structure that is shoehorned into Python.

            • fruitcantfly@programming.dev
              link
              fedilink
              arrow-up
              2
              ·
              5 months ago

              A single underscore is just a naming convention, but double underscores triggers automatic name-mangling of the variable in question:

              $ cat test.py
              class foo:
                      def __init__(self, x):
                              self.__x = x
              
              f = foo(1)
              f.__x
              $ python3 test.py
              Traceback (most recent call last):
                File "/mnt/d/test.py", line 6, in <module>
                  f.__x
              AttributeError: 'foo' object has no attribute '__x'
              

              However, much like private/protected variables in java, this is pretty trivial to circumvent if you want.

              But I don’t believe that you can argue that access modifiers are required for OO not to be shoehorned into a language, not when influential OO languages like Smalltalk didn’t have this feature either. Java just happens to be closer to C++, where public/private/protected is much more rigidly enforced than either Java or Python