• 【Python学习日记】B站小甲鱼:属性访问


    属性访问 property

    class C:
        def __init__(self, size=10):
            self.size = size
    
        def getSize(self):
            return self.size
    
        def setSize(self, value):
            self.size = value
    
        def delSize(self):
            del self.size
    
        x = property(getSize, setSize, delSize)
    
    
    c = C()
    c.x = 1
    print(c.size)

    定义一个矩形

    class Rectangle():
        def __init__(self, width=0, hight=0):
            self.width = width
            self.hight = hight
    
        def __setattr__(self, name, value):
            if name == 'Square':
                self.hight = value
                self.width = value
            else:
                super().__setattr__(name, value)
    
        def getArea(self):
            return self.width * self.hight
    
    r1 = Rectangle(3,6)
    print(r1.getArea())
    r1.Square =10
    print(r1.getArea())

    如果不使用super()访问基类的方法,就会陷入死循环


    描述符:将某种特殊类型的类的实例指派给另一个类的属性

    练习:要求定义一个温度类,然后定义两个描述符类用于描述摄氏度和华氏度两个属性。要求两个属性会自动进行转换。

    class Celsius:
        def __init__(self, value=26.0):
            self.value = float(value)
    
        def __get__(self, instance, owner):
            return self.value
    
        def __set__(self, instance, value):
            self.value = float(value)
    
    
    class Fahrenheit:
        def __get__(self, instance, owner):
            return instance.cel*1.8+32
    
        def __set__(self, instance, value):
            instance.cel = (float(value)-32)/1.8
    
    
    class Temperature:
        cel = Celsius()
        fah = Fahrenheit()
    
    
    temp = Temperature()
    temp.cel = 30
    print(temp.fah)
    print('*')
    temp.fah = 100
    print(temp.cel)

    输出结果是

    86.0
    *
    37.77777777777778

    能够实现华氏温度和摄氏温度的互相转换

  • 相关阅读:
    Java反射(2)访问字段(Field)
    《编程珠玑》中“位图排序”引发的一系列实验
    Java : 传值or传引用?
    const 指针
    三种数据库访问——Spring3.2 + Hibernate4.2
    三种数据库访问——Spring JDBC
    数据库连接池:Druid
    三种数据库访问——原生JDBC
    介绍4款json的java类库 及 其性能测试
    云存储(Swift+Keystone)部署策略
  • 原文地址:https://www.cnblogs.com/JodyJoy1201/p/13663158.html
Copyright © 2020-2023  润新知