zoukankan      html  css  js  c++  java
  • 【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

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

  • 相关阅读:
    77. Combinations
    319. Bulb Switcher
    222.Count Complete Tree Nodes
    842.Split Array into Fibonacci Sequence
    306.Additive Number
    747.Largest Number At Least Twice of Others
    并查集
    HDU-3371 Connect the Cities
    HDU-1863 畅通工程
    HDU-1879 继续畅通工程
  • 原文地址:https://www.cnblogs.com/JodyJoy1201/p/13663158.html
Copyright © 2011-2022 走看看