python函数的面向对象——面向对象设计

本文通过函数式编程向面向对象编程的演进过程,详细解释了如何从简单的字典操作逐步发展为具备独立属性和行为的对象。从创建单一功能的函数开始,逐渐过渡到能够接收参数并利用内部函数实现特定行为的复杂结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过几个函数式编号演进,理解面向对象设计

def01.py

 1 dog1 = {
 2     'name':'元昊',
 3     'gender':'',
 4     'type':'藏獒'
 5 }
 6 dog2 = {
 7     'name':'李李',
 8     'gender':'',
 9     'type':'腊肠'
10 }
11 
12 def jiao(dog):
13     print('一条狗[%s],汪汪'%dog['name'])
14 
15 def yaoren(dog):
16     print('一条狗[%s]正在咬人'%dog['type'])
17 
18 jiao(dog1)
19 yaoren(dog1)
20 yaoren(dog2)

 def02.py

 6 
 7 def dog():
 8     def jiao(dog):
 9         print('一条狗[%s],汪汪'%dog['name'])
10 
11     def yaoren(dog):
12         print('一条狗[%s]正在咬人'%dog['type'])
13 
14     dog1 = {
15         'name': '元昊',
16         'gender': '',
17         'type': '藏獒',
18         'jiao':jiao,
19         'yaoren':yaoren
20     }
21     return dog1
22 
23 d1 = dog()
24 d1['jiao'](d1)

def03.py

 6 
 7 def dog(name,gender,type):
 8     def jiao(dog):
 9         print('一条狗[%s],汪汪'%dog['name'])
10 
11     def yaoren(dog):
12         print('一条狗[%s]正在咬人'%dog['type'])
13 
14     dog1 = {
15         'name': name,
16         'gender': gender,
17         'type': type,
18         'jiao':jiao,#内部函数
19         'yaoren':yaoren#内部函数
20     }
21     return dog1#因为作用域的问题,所以一定要用内部的return 返回jiao,yaoren的函数,才能被外部调用
22 
23 d1 = dog('张明','','腊肠')

24 d1['jiao'](d1)#引入返回的那个数组d1 ,

 

def04.py

 6 
 7 def dog(name,gender,type):
 8     def jiao(dog):
 9         print('一条狗[%s],汪汪'%dog['name'])
10 
11     def yaoren(dog):
12         print('一条狗[%s]正在咬人'%dog['type'])
13 
14     def init(name,gender,type):
15         dog1 = {
16             'name': name,
17             'gender': gender,
18             'type': type,
19             'jiao':jiao,#内部函数
20             'yaoren':yaoren#内部函数
21         }
22         return dog1
23 
24     return init(name,gender,type)
25 
26 d1 = dog('张明','','腊肠')
26 print(d1['name'],d1['gender'])
27 d1['jiao'](d1)#引入返回的那个数组d1 ,

# 那么一个函数,
# 就是给定不同属性,设置属性到它内部,
# 并且它内部的函数使用了这些属性,完成了新的动作,
# 通过返回方法至一个字典当中,让外部调用这个方法(属性和方法都需要让外部去访问,在字典类型当中来讲,是平等的),
# 即完成了所谓的【面向对象】

# 对象在不描述之前什么都不是。
# 对象就是需要描述它的动作和特征,才能去定义它。比如:人,长什么样,能做什么;灯泡,是什么样,能做什么。

# 类是抽象的,只有属性和方法。 dog()函数就是
# 但对象是经过动作和特征的定义的。d1 定义后,就是一条狗了
# 这就是面向对象设计

类就像模板,定义后就是一个对象了。

由 类-----产生-----对象的过程叫做实例化(实例=对象)

 在python当中,没有要求你一定要写面向对象的代码。用面向对象的语言,和一个程序的设计是面对对象的,两者无任何关系。

你写的程序是不是面向对象的,和你用的语言是不是面向对象的无关系!面向对象设计,只不过是函数/过程式编程的演进。关键在于面向对象的设计思路。

 

转载于:https://www.cnblogs.com/ekuj/p/8472392.html

### 魔术方法概述 Python 中的魔术方法是一系列以双下划线开头和结尾的方法,这类方法在特定场景下会被 Python 解释器自动调用[^3]。通过自定义这些方法,开发者能够使自己的类具备类似于内置类型的行为。 ### 基本算术运算的实现 对于基本的数据类型如整数 `int` 而言,在执行减法操作时实际上是在背后调用了 `__sub__()` 这一魔术方法;而其他一些数据结构比如字符串或是列表则并未提供这样的机制因此无法直接参与此类运算[^1]。这意味着如果想要扩展或修改已有的行为模式,则可以通过重新定义这些特殊名称的方法来达成目的。 ### 可调用对象的支持 除了上述提到的操作外,还有诸如 `__call__()` 的存在使得实例化后的对象也能够如同普通函数那样接受参数并返回结果值[^4]。下面给出一段简单的代码片段展示如何利用这一特性: ```python class CallableExample: def __init__(self, value=0): self.value = value def __call__(self, *args, **kwargs): print(f"Called with arguments {args} and keyword arguments {kwargs}") return sum(args) + self.value callable_obj = CallableExample(5) result = callable_obj(1, 2, three='three') print(result) ``` 这段程序会输出如下内容: ``` Called with arguments (1, 2) and keyword arguments {'three': 'three'} 8 ``` 这里展示了怎样创建一个具有可调用能力的对象,并且可以在实际应用中传递任意数量的位置参数以及关键字参数给它处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值