python - 用类创建对象,为什么需要__init__(self, args) :?

标签 python class object init

很抱歉提出这样奇怪的问题,通常当我感到困惑时,我只是“顺其自然”,直到我顿悟,然后再解决它,但是在内部调用 def __init__(self):我的类(class)似乎完全是多余的,似乎把它去掉也一样有效:

class Pet(object):
    type_of_pet = ""
    number_of_legs = 0
    name = ""

让我创建:

fred = pet()
fred.type_of_pet = "alligator"

就像我要将类更改为一样:

class Pet(object):
    def __init__(self):
         type_of_pet = ""

alice = Pet()
alice.type_of_pet = "Pterodactyl" 

我只是不明白为什么我需要 __init__ 并且这里的其他线程并不像我希望的那样清晰。我可以做些什么来使这个“点击”?

最佳答案

在类定义中放置赋值语句不会声明实例属性;它设置类属性。如果这样做,所有宠物将共享相同的 nametype_of_petnumber_of_legs

__init__ 用于设置实例属性:

def __init__(self, type_of_pet, name, number_of_legs):
    self.type_of_pet = type_of_pet
    self.name = name
    self.number_of_legs = number_of_legs

这将在实例而不是类上设置属性,因此每个对象都有自己的名称、类型和腿数。

关于python - 用类创建对象,为什么需要__init__(self, args) :?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18324127/

相关文章:

linux - protobuf如何判断一个值是属于可选字段,还是属于另一个对象?

python - 如何在 "Check iO"游戏中使用 tests.py 文件在本地测试代码

python - 使用Python模块BeautifulSoup抓取XML,需要树中的特定标签

c# - 何时在 C# 中使用静态类

c++ - 有没有一种方法可以使用重载运算符作为比较的一部分

javascript - React - 如何向对象添加动态键/值对?

java - 无法访问同一类中的对象数组?

python - AWS SageMaker 训练脚本 : how to pass custom user parameters

python - 通过Gitlab合并请求将参数传递给Jenkins

c++ - 如果未定义析构函数,为什么不进行返回值优化?