python - 无需初始化的面向对象编程
问题描述
我已经阅读了许多类似的问题,但我仍然不明白这一点。
看这个例子:
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
问题:如果两个版本都允许将方法传递给每个类的单个实例,那么为什么还要使用第二种方法呢?它们看起来像相同的结果。
解决方案
不同之处在于init 方法是在对象初始化时调用的,例如,这意味着您需要传递参数。假设您有一个具有颜色的 Dog 类,您不能使用没有颜色的 Dog,因此您需要传递颜色,否则依赖于该颜色的函数将无法运行。这里也是一个很好的解释链接:https : //micropyramid.com/blog/understand-self-and-init-method-in-python-class/
对于狗的例子,假设你有一个函数
print(self.color)
如果您不使用颜色初始化类,则该函数将不会运行。该__init__
函数始终在初始化时运行,您可以指定从对象初始化时必须传递的参数。参考狗->颜色。
推荐阅读
- python - TypeError:字符串索引必须是带有 JSON 的整数
- java - Hibernate - 与 MS SQL Server 一起处理浮点值
- terraform - alicloud_cs_managed_kubernetes vs alicloud_cs_kubernetes on terraform
- xslt - 如何使用 XSLT 将元素复制到组中的所有元素
- java - 如何在springboot中抛出外部端点抛出的相同异常
- algorithm - 如何去除图像中的亮度区域?
- java - 逐字符读取文件并在其中找到输入字符串
- vb.net - 如何将包含文本和数字的文本行与前面的 $ 符号分开?
- excel - 表1中输入信息时如何在表2上自动填写信息
- jquery - Laravel 5.7 - AJAX 发布到数据库不刷新主页中的结果