zoukankan      html  css  js  c++  java
  • python面向对象之属性

    property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值

    class Person:
        def __init__(self,name,height,weight):
            self.name = name
            self.__height = height
            self.__weight = weight
        @property    #     装饰,将bim方法伪装成一个属性
        def bmi(self):
            return "%s的BMI指数是%s" %(self.name,self.__weight / self.__height ** 2)
    
    p = Person("alex",1.8,70)
    print(p.bmi)    #装饰伪装成一个属性 之后输出打印不必写 p.bmi()
    为什么要用property
    将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法擦觉自己
    的name是执行了一个函数然后计算出来的,这种特性的使用方式遵循l统一访问的原则

    由于新式类中具有三种访问方式,我们可以根据他们几个属性的访问特点,分别将三个方法定义为
    同一属性:获取,修改,删除
    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
            print(66)
    
    p1 = Person("alex",20)
    # print(p1.age)    #或取属性,直接调用
    # p1.age = 40      # 修改属性
    # print(p1.__dict__)    #   内部被修改{'name': 'alex', '_Person__age': 40}
    # print(p1.age)
    del p1.age       # 删除属性
    print(p1.__dict__)    # {'name': 'alex'}    __age被删除
  • 相关阅读:
    Nginx部署部分https与部分http【转】
    MySQL指定使用某个索引查询语句
    MySQL创建相同表和数据命令
    Apache+jboss群集部署
    运维小知识之nginx---nginx配置Jboss集群负载均衡
    SSL证书生成方法【转】
    Nginx搭建https服务器
    基于OpenSSL实现C/S架构中的https会话
    OnlineJudgeServer运行
    百科知识 isz文件如何打开
  • 原文地址:https://www.cnblogs.com/caodneg7/p/9378445.html
Copyright © 2011-2022 走看看