一日一技:为什么年代久远的 Python 项目里面那么多默认参数?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了一日一技:为什么年代久远的 Python 项目里面那么多默认参数?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2505字,纯文字阅读大概需要4分钟。
内容图文
![一日一技:为什么年代久远的 Python 项目里面那么多默认参数?](/upload/InfoBanner/zyjiaocheng/620/ef6fcd9389264d83b6188d4944bd7ff4.jpg)
一日一技:为什么年代久远的 Python 项目里面那么多默认参数?
摄影:产品经理
蜡烛上面的跑马灯
在写 Python 代码的时候,大家可能会在不知不觉中使用一些设计范式。我们来看两个例子。
假设有一个类People:
class People:
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
def dance(self):
print('我在跳舞')
def study(self):
print('我在学习')
def eat(self):
print('我在吃东西')
现在我们有另一个类Cla***oom:
class Cla***oom:
def __init__(self, size):
self.size = size
self.student = People('小明', 17, '男')
def start_class(self):
self.student.study()
我们在Cla***oom的构造函数中,初始化了一个 student 对象,然后在start_class方法中,调用了这个对象的study方法。
这个过程看起来似乎没有什么问题,相信很多读者也是这样写代码的。
现在,我们再增加两个类:
class Restaurant:
def __init__(self, name):
self.name = name
self.consumer = People('张三', 30, '男')
def start_launch(self):
self.consumer.eat()
class Ballroom:
def __init__(self, address):
self.address = address
self.dancer = People('小红', 20, '女')
def open(self):
self.dancer.dance()
新增加的两个类Restaurant和Ballroom的构造函数里面都通过People类初始化了对象。然后在调用这个对象的方法。
这样写看起来没有问题,能正常工作,代码也不丑。
现在,People类需要修改一下它的构造函数:
class People:
def __init__(self, name, age, sex, address):
self.name = name
self.age = age
self.sex = sex
def dance(self):
print('我在跳舞')
def study(self):
print('我在学习')
def eat(self):
print('我在吃东西')
在初始化People类时,需要传入一个address参数。现在怎么办?
于是Cla***oom、Restaurant、Ballroom这三个类的构造函数都要随之做修改,全都得加上这个address参数。
这就叫做牵一发而动全身。
很多人为了避免做这样的修改,会把新增加的这个参数address改成默认参数:
class People:
def __init__(self, name, age, sex, address=''):
self.name = name
self.age = age
self.sex = sex
def dance(self):
print('我在跳舞')
def study(self):
print('我在学习')
def eat(self):
print('我在吃东西')
这样看起来,另外三个类的代码就不需要做任何修改了。
这就是为什么你们公司的代码里面,很多函数会带上大量奇奇怪怪的默认参数的原因。”
在编程范式中,有一个术语叫做依赖注入,就是为了解决这个问题的。
而且做起来简单到你觉得这是在逗你,把People初始化以后的对象传到其他类的构造函数中即可:
class Ballroom:
def __init__(self, address, dancer):
self.address = address
self.dancer = dancer
def open(self):
self.dancer.dance()
dancer = People('小红', 20, '女')
ballroom = Ballroom('xxx', dancer)
ballroom.open()
虽然叫做编程范式,但也不是说应该始终使用依赖注入。例如你的代码会层层调用,难道从第一层把对象一层一层传到最里面去?所以应该根据实际情况来进行选择。
内容总结
以上是互联网集市为您收集整理的一日一技:为什么年代久远的 Python 项目里面那么多默认参数?全部内容,希望文章能够帮你解决一日一技:为什么年代久远的 Python 项目里面那么多默认参数?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。