python使用property把方法伪装成属性使用

本文介绍Python中使用@property装饰器及property函数实现属性封装的方法,包括属性的获取、设置与删除,帮助开发者更好地理解和运用这些技术。

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

在python中,我们经常性的使用 对象.属性  来获取属性的值, 使用对象.方法() 来调用方法,但是python也为我们提供了通过

对象.方法来调用方法的方式(注:此处调用没有括号())

以下通过两种方式来实现:

第一种方法:使用装饰器@property来实现,简单粗暴看代码:

#!/usr/bin/env python3
# encoding:utf-8
'''
@author: lierl
@file: use_property_1.py
@time: 2018/4/4 9:43
'''
__author__ = 'lierl'

class User(object):
    def __init__(self, name, age):
        self.__name = name
        self.__age = age

    @property
    def name(self):
        return self.__name

    @name.setter
    def name(self, name):
        self.__name = name

    @name.deleter
    def name(self):
        print("删除数据:%s " % self.__name)

    def get_name(self):
        return self.__name

user = User("张三", 28)
print(user.name)

user.name = "李四"
print(user.name)

del user.name

输出结果:

张三
李四

删除数据:李四 

由于User对象中的name属性是使用私有属性,所以使用user.name调用的是name方法

将一个方法伪装成为属性后,就不再使用圆括号的调用方式了。而是类似变量的赋值、获取和删除方法了。但是代码具体细节还是需要根据你自己的需求去实现的

那么如何将一个方法伪装成属性呢?三步走

  • 在普通方法上添加@property装饰器,如上面的name()方法。其实它就相当于get方法,我们可以通过user.name来调用这个方法获取其值。此方法只能有一个self参数。此方法和get_name方法时一样的
  • 再写一个同名的方法,添加@xxx.setter装饰器(xxx就是添加@property的方法名),如例子中的第二个方法。这相当于编写了一个set方法,提供赋值功能,可以通过user.name='1111'的语句执行此代码赋值,和给属性赋值一样
  • 最后再写一个同名的方法,并添加@xxx.deleter装饰器,如例子中的第三个方法。用于删除功能,可以通过del user.name执行此代码。

简单总结:就是分别将三个方法定义为对同一个属性的获取、修改和删除。还可以定义只读属性,也就是只定义getter方法,不定义setter方法就是一个只读属性

第二个方法:使用property()函数实现,依然简单粗暴先上代码

class User(object):
    def __init__(self, name, age):
        self.__name = name
        self.__age = age

    def del_name(self):
        print("删除数据:%s " % self.__name)

    def set_name(self, name):
        self.__name = name

    def get_name(self):
        return self.__name

    name = property(get_name, set_name, del_name, "姓名")#将方法伪装成属性

user = User("张三", 28)
print(user.name)

user.name = "李四"
print(user.name)

del user.name

此代码和上面运行结果是一样的:

张三
李四

删除数据:李四 

property()函数的参数详解:

  1. 第一个参数是方法名,调用 实例.属性 时自动执行的方法
  2. 第二个参数是方法名,调用 实例.属性 = XXX时自动执行的方法
  3. 第三个参数是方法名,调用 del 实例.属性 时自动执行的方法
  4. 第四个参数是字符串,调用 实例.属性.__doc__时的描述信息


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值