• 面向对象:属性-装饰器函数@property


    # 属性的初识
      属性: 装饰器函数,内置函数,帮助你将类种的方法伪装成属性,特性。代码上没有什么提升,只是更合理.
        
        @property 调用方法的时候不需要主动加括号,让程序的逻辑性更合理.

        @属性名.setter 装饰器,修改被property装饰的属性的时候会调用被这个装饰器装饰的方法,除了self之外还有一个参数,被修改的值
        @属性名.deleter 装饰器,当要删除被property装饰的属性的时候会调用这个被这个装饰器装饰的方法
    class Person:
    
        def __init__(self,name,hight,weight):
            self.name = name
            self.__hight = hight
            self.__weight = weight
    
        @property
        def bmi(self):
            return '%s 的bmi 值%s' %(self.name,self.__weight / self.__hight ** 2)
    
    p1 = Person('大阳哥',1.68,70)
    # print(p1.bmi())
    print(p1.bmi)
    # 属性  : 将一个方法  伪装成一个 属性,在代码的级别上没有本质的提升,但是让其看起来跟合理.
    print(p1.name)
    p1.name = 'alex'
    print(p1.name)
    # 属性的改
    class Person:
        def __init__(self,name,age):
            self.name = name
            if type(age) is int:
                self.__age = age
            else:
                print( '你输入的年龄的类型有误,请输入数字')
        @property
        def age(self):
            return self.__age
    
        @age.setter
        def age(self,a1):
            '''判断,你修改的年龄必须是数字'''
            if type(a1) is int:
                self.__age = a1
            else:
                print('你输入的年龄的类型有误,请输入数字')
    
        @age.deleter
        def age(self):
            del self.__age
    
    p1 = Person('帅哥',20)
    print(p1.age)
    print(p1.__dict__)
    p1.age = 23
    print(p1.age)
    del p1.age
    print(p1.__dict__)

    20
    {'name': '帅哥', '_Person__age': 20}
    23
    {'name': '帅哥'}

    # property : 类似于bmi这种,area,周长....  ***
    # @age.setter **
    # @age.deleter *
    待整理:
    # property 装饰器函数,内置函数,帮助你将类中的方法伪装成属性,特性
    # 调用方法的时候不需要主动加括号
    # 让程序的逻辑性更合理
    # @方法名.setter 装饰器,修改被property装饰的属性的时候会调用被这个装饰器装饰的方法,除了self之外还有一个参数,被修改的值
    # @方法名.deleter 装饰器,当要删除被property装饰的属性的时候会调用被这个装饰器装饰的方法

    # 只用property
    # class Circle:
    # def __init__(self,r):
    # self.r = r
    # # self.area = 3.14*self.r**2
    #
    # @property
    # def area(self): # 这个方法计算结果本身就是是一个属性,但是这个属性会随着这个类/对象的一些基础变量的变化而变化
    # return 3.14*self.r**2

    # c = Circle(5)
    # print(c.area)
    # c.r = 10
    # print(c.area)

    # 偏其他语言 property+私有的 合用 ,这个时候更多的也会用到setter和deleter
    # class A:
    # def __init__(self,name):
    # self.__name = name
    #
    # @property
    # def name(self):
    # return self.__name
    #
    # @name.setter
    # def name(self,new_name):
    # if type(new_name) is str:
    # self.__name = new_name
    #
    # @name.deleter
    # def name(self):
    # del self.__name
    # a = A('alex')
    # a.name = 123
    # print(a.name)
    # del a.name # 语法
    # print(a.name)
     
  • 相关阅读:
    sql server 修改/查看 主键初始值
    国内外邮箱正则验证及js示例
    修改表中主键 标识/初始值
    主角场景Shader效果:遮挡透明
    主角场景效果:人物阴影
    主角场景Shader效果:描边
    主角场景Shader效果:光影
    Unity ZTest深度测试 & ZWrite深度写入
    天气系统:雨、雪
    UnityShader 序列帧动画效果
  • 原文地址:https://www.cnblogs.com/skydragon/p/11674771.html
Copyright © 2020-2023  润新知