Python 在本例中,self.\uuuuu class\uuuuuuuu、\uuuuuuu name\uuuuuuuu和\uuuuuuuuuu repr\uuuuuu的目的是什么?

Python 在本例中,self.\uuuuu class\uuuuuuuu、\uuuuuuu name\uuuuuuuu和\uuuuuuuuuu repr\uuuuuu的目的是什么?,python,python-3.x,subclass,Python,Python 3.x,Subclass,我对python(以及一般的编码)是新手,我一直在努力学习类。我觉得类的概念对我来说才刚刚开始流行,但是在混合中添加子类(这和元类是一样的吗?)让我更加困惑 根据我朋友的推荐,我一直在努力完成python动物园项目。目标是使用类和面向对象编程来创建一个程序,该程序可以表示有笼子的动物园,里面有动物,这些动物具有独特的属性。(如果您想查看,这里是练习,但我将提供与我的困惑相关的代码) 我目前对该代码的理解: 我们有一个给每种动物命名为“未命名”的类动物 老鼠和山羊是动物的亚类 我不明白的是:

我对python(以及一般的编码)是新手,我一直在努力学习类。我觉得类的概念对我来说才刚刚开始流行,但是在混合中添加子类(这和元类是一样的吗?)让我更加困惑

根据我朋友的推荐,我一直在努力完成python动物园项目。目标是使用类和面向对象编程来创建一个程序,该程序可以表示有笼子的动物园,里面有动物,这些动物具有独特的属性。(如果您想查看,这里是练习,但我将提供与我的困惑相关的代码)

我目前对该代码的理解:

  • 我们有一个给每种动物命名为“未命名”的类动物
  • 老鼠和山羊是动物的亚类
我不明白的是:

  • \uuuu repr\uuuuuuu
    \uuuu class\uuuuu
    \uuuu name\uuuuuuu
    各自做什么
  • 为什么处理类的事情在变量前后都有下划线?python对这些对象有不同的处理方式吗?或者下划线只是一种表示某种东西的命名方案
  • \uuuu repr\uuuuu(self)
    函数正在执行的操作

感谢您的帮助

与您的问题(已由多个重复问题回答)没有直接关系,但在有备选方案时使用dunder属性是不好的做法。例如,最好使用
type(self)
而不是
self.\uuuu class\uuuu
。@sshashank124您能重新打开我的问题吗?我已经看过你列出的两个类似问题,我认为他们回答的问题比我的问题更复杂。您列出的第一个是关于抽象类的,这是关于普通类的。如果有人能解释一下我在一个像我提供的例子一样简单的例子中所问的概念,那将对我有很大帮助。谢谢Python中没有抽象类,只是请求的人并不打算实例化该类,因此他们将其命名为
abstract1
。这个问题很简单,也很好地回答了您的问题。@Selcuk:abc模块提供抽象类支持。甚至在这个问题的最上面的答案中也提到了这一点。(不会真正改变dupe目标的适用性。)@user2357112supportsMonica好吧,是和否。你说有一些支持在技术上是正确的,但是(1)它是一个库,虽然有PEP支持,但不是一个语言特性;(2)你可以在ABCs中实际实现方法,这使它们不完全抽象。编辑:Martijn Pieters在同一个问题中甚至有一条评论:
ABC仍然可以直接实例化
class Animal:
    """ Can be placed inside cages, and according to its place in food chain
    it has a list attribute of its prey (what it likes to eat).
    """

    prey = []

    def __init__(self):
        self.name = 'Unnamed'       # Default naming, to be modified

    def __repr__(self):
        """ Identifies the Animal by its name and species (subclass).
        """
        species = self.__class__.__name__
        return self.name + " " + species if self.name != 'Unnamed' else species


class Mouse(Animal):

    def __init__(self):
        super().__init__()


class Goat(Animal):

    def __init__(self):
        super().__init__()