对象 Object

1. 何为对象

对象是一种数据抽象或数据结构抽象,用来表示程序中需要处理或已处理的信息。

Python中,对象具有三个基本特征:本征值(identity)、型式(type)和值(value)。

可以尝试运行下列代码:

a = 1 
print(id(a))    # identity
print(type(a))  # type
print(a)        # value

在Python中,对于id这样解释:

Python中一切皆为对象。除了上边的变量(a),函数和类也是对象。

2. 函数和类作为对象的使用

2.1 将函数和类传入列表

class Person:
    def __init__(self):
        print("张三")

def print_name(name = "李四"):
    print(name)
    return "test"

# 实例化Person类 
my_class = Person
my_class()

# 将函数和类对象传递到列表对象中
obj_list = []
obj_list.append(print_name)
obj_list.append(Person)

for item in obj_list:
    print(item())

输出结果:

    张三                                                                                         // my_class()输出

    李四                                                                                         // 以下均为obj_list[ ]中的元素

    test                                                                                                //return值,默认是None

    张三

    <__main__.Person object at 0x0000018D4A71DF10>          

 对于输出结果的解释:

<__main__.Person object at 0x0000018D4A71DF10> 意味着在Python中,这是一个类实例对象的默认字符串表示形式。具体来说:

  1. Person 类被定义,其 __init__ 方法在实例化时打印 "张三"。
  2. my_class = Person 将类 Person 赋给变量 my_class
  3. my_class() 创建了一个 Person 类的实例,输出 "张三"。
  4. obj_list 是一个列表,包含了两个对象:print_name 函数和 Person 类本身。
  5. 在循环中,item() 被调用,对于 print_name 函数,它会打印 "李四" 并返回 "test",对于 Person 类,则输出 <__main__.Person object at 0x0000018D4A71DF10>

这个输出表示了 Person 类的一个实例的内存地址,每个Python对象在内存中都有一个唯一的地址表示。

2.2 将函数当作返回值(装饰器)

在2.1代码的基础上,运行下列代码:

def decorator_func():
    print("start...")
    return print_name

#装饰器的用法
my_func_return = decorator_func()
my_func_return("王五")

输出结果:

    strat...

    王五

 另一个装饰器的例子:

def my_decorator(func):
    def wrapper():
        print("Something is happening before the function is called.")
        func()
        print("Something is happening after the function is called.")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

say_hello()

解释

  1. 定义装饰器函数 my_decorator

    这个装饰器函数接受一个函数 func 作为参数。在 my_decorator 内部定义了一个嵌套函数 wrapper,它在调用 func 之前和之后打印一些信息。my_decorator 返回 wrapper 函数。
  2. 使用装饰器

    @my_decorator 语法是装饰器的一种便捷用法,相当于 say_hello = my_decorator(say_hello)say_hello 被替换为 wrapper 函数,这个函数在调用 func 之前和之后做了一些额外的操作。
  3. 调用被装饰的函数

    调用 say_hello() 时,实际上执行的是 wrapper 函数,输出如下:

Something is happening before the function is called.
Hello!
Something is happening after the function is called.

通过这个例子可以看到,装饰器允许你在不改变原始函数定义的情况下,添加额外的行为。这在需要在多处应用相同逻辑(如日志记录、访问控制、计时等)时非常有用。

2.3 将函数作为参数传入其他函数

# 将函数作为一个参数传入另一个函数
def a():
    print("这是a函数打印的值")

def b(func):
    return func

c = b(a)
c()

输出结果:

这是a函数打印的值

 当然,类也是对象,也可以实现将类作为参数传入其他的函数:

class Person:
    def __init__(self):
        print("这是Person类打印的值")

def b(func):
    return func

c = b(Person)
c()

输出结果为:

这是Person类打印的值

 参考:2. python一切皆对象_哔哩哔哩_bilibili

  • 18
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值