美文网首页
Python: property属性

Python: property属性

作者: xiaohan_zhang | 来源:发表于2019-06-22 13:07 被阅读0次

@property可以把一个实例方法变成其同名属性,以支持.号访问
@property属性的两种方式
装饰器:在方法上应用装饰器
类属性:在类中定义值为property对象的类属性

装饰器:

新式类@property的三种方法(获取值、设置值、删除属性),用几个写几个即可

# 取代setter getter方法
class Goods(object):

    def __init__(self):
        # 原价
        self.original_price = 100
        # 打折
        self.discount = 0.8

    @property
    def price(self):
        # 实际价格 = 原价 * 折扣
        new_price = self.original_price * self.discount
        return new_price

    @price.setter
    def price(self, value):
        self.original_price = value

    @price.deleter
    def price(self):
        print("price.deleter")
        del self.original_price


obj = Goods()
p = obj.price           # 自动执行 @property 修饰的 price 方法,并获取方法返回值
print("商品原价:%.2f" % p)
obj.price = 200     # 自动执行 @price.setter 修饰的 price 方法,并将100赋值给方法的参数
print("修改后商品原价:%.2f" % obj.price)
# 删除商品原价
del obj.price       # 自动执行 @price.deleter 修饰的 price 方法

类属性方式:

创建值为property对象的类属性
property方法中有四个参数:
参数一:方法名,调用对象.属性时 自动触发执行方法
参数二:方法名,调用对象.属性=XXX时 自动触发执行方法
参数三:方法名,调用del 对象.属性时 自动触发执行方法
参数四:字符串,调用类.属性.doc时 此参数是该属性的描述信息
注:一般前两个参数就够了

# 升级setter getter方法
class Foo(object):
    def __init__(self):
        self._name = "xiaolan"

    def get_bar(self):
        return self._name

    def set_bar(self, value):
        self._name = value

    def del_bar(self):
        print("del_bar")

    name = property(get_bar, set_bar, del_bar, "description...")


f = Foo()
ret = f.name   # 自动调用第一个参数中定义的方法:get_bar
print(ret)
f.name = "AAA"   # 自动调用第二个参数中定义的方法:set_bar
print(f.name)
desc = Foo.name.__doc__    # 自动获取到第四个参数中设置的值
print(desc)
del f.name   # 自动调用第三个参数中定义的方法:del_bar
  • 私有化
    xx: 公有变量
    _xx: 私有化属性或方法,from somemodule import * 禁止导入,类对象和子类可以访问
    _xx: 避免与子类中的属性命名冲突,无法再外部直接访问
    xx: 用户名字控件的魔法对象或属性。例如:init,不要自己发明这样的名字
    xx
    : 用于避免与Python关键字冲突

通过name mangling((名字重整),目的就是防止子类意外重写父类或基类的方法或属性,如:_Class_object) 就可以访问private了

相关文章

  • python @property

    参考 Python进阶之“属性(property)”详解 - Python - 伯乐在线

  • 属性Property

    property也是一个类,@property成为属性函数,即可以将python定义的方法当做属性访问,可以对属性...

  • Python Property 属性

    输出结果: 更加简介的方式如下:

  • python属性property

    属性函数(property)在对象中两个很重要的元素就是属性和方法,在调用的时候两者是有区别的。 从例子中我们可以...

  • Python: property属性

    @property可以把一个实例方法变成其同名属性,以支持.号访问@property属性的两种方式装饰器:在方法上...

  • python 属性property

    class Person:def init(self, first_name):self.first_name =...

  • 属性property

    Python中有一个被称为属性函数(property)的小概念,它可以做一些有用的事情。属性property能做以...

  • Python 描述符对象 Descriptor Objects

    Reproduce from python描述符(descriptor)、属性(Property)、函数(类)装饰...

  • python练习7_@property的使用

    首先理解@property:@property是将python定义的函数"当做"属性来访问,从而提供更加友好的访问...

  • Python 扩展property属性

    我们都知道property是将类的方法变成属性的装饰器 有时候我们想隐藏一些内部的属性,不让外部可以调用和更改。我...

网友评论

      本文标题:Python: property属性

      本文链接:https://www.haomeiwen.com/subject/ofgmqctx.html