首页 > 解决方案 > 无需初始化的面向对象编程

问题描述

我已经阅读了许多类似的问题,但我仍然不明白这一点。

看这个例子:

class Cat:
    pass

a_cat = Cat
a_cat.name = "hs"
a_cat.name
'hs' #returns this

上面我已经做了一个实例,cat class并且name特别是关于那只猫。没__init __用过。

这是一个类似的示例,但带有__init__.

class Dog:
    def __init__(self,name):
        self.name = name

doggo = Dog("ad")
doggo.name
'ad' #returns this

问题:如果两个版本都允许将方法传递给每个类的单个实例,那么为什么还要使用第二种方法呢?它们看起来像相同的结果。

标签: pythonoop

解决方案


不同之处在于init 方法是在对象初始化时调用的,例如,这意味着您需要传递参数。假设您有一个具有颜色的 Dog 类,您不能使用没有颜色的 Dog,因此您需要传递颜色,否则依赖于该颜色的函数将无法运行。这里也是一个很好的解释链接:https : //micropyramid.com/blog/understand-self-and-init-method-in-python-class/

对于狗的例子,假设你有一个函数

print(self.color)

如果您不使用颜色初始化类,则该函数将不会运行。该__init__函数始终在初始化时运行,您可以指定从对象初始化时必须传递的参数。参考狗->颜色。


推荐阅读