python 属性

#! /usr/bin/env python
#! -*- cording:utf-8 -*-
#
# class C:
#     def __getattribute__(self, name):
#         print("getattribute")
#         return super().__getattribute__(name)#super默认找父类
#     def __getattr__(self, name):
#         print("getattr")
#     def __setattr__(self, name, value):
#         print("setatter")
#         super().__setattr__(name,value)
#     def __delattr__(self, name):
#         print("delattr")
#         super().__delattr__(name)
# c=C()
# c.x
#
# c.x=1

class rectangle:
    def __init__(self,width=0,height=0):#构造函数
        self.width=width
        self.height=height
    def __setattr__(self, name, value):
        if name=="square":
            self.width=value
            self.height=value
        else:
            super().__setattr__(name,value)
    def getArea(self):
        return  self.width*self.height

r1=rectangle(4,5)#实例化类
print(r1.getArea())
r1.square=10#说明赋予了一个square属性,被设置了,则直接把square赋值给value,执行操作,就是正方形
print(r1.getArea())
print(r1.__dict__)#直接打印出了字典属性
时间: 2024-10-12 13:54:09

python 属性的相关文章

python属性查找

python中执行obj.attr时,将调用特殊方法obj.__getattribute__('attr'),该方法执行搜索来查找该属性,通常涉及检查特性.查找实例字典.查找类字典以及搜索基类.如果搜索过程失败,最终会尝试调用类的__getattr__()方法.如果这也失败,则抛出AttributeError异常. 具体步骤如下: 1.如果attr是个特殊属性(例如python提供的),直接返回. 2.在obj.__class__.__dict__即类字典中查找attr,如果attr是个data

python属性查找(attribute lookup)

在Python中,属性查找(attribute lookup)是比较复杂的,特别是涉及到描述符descriptor的时候. 在上一文章末尾,给出了一段代码,就涉及到descriptor与attribute lookup的问题.而get系列函数(__get__, __getattr__, __getattribute__) 也很容易搞晕,本文就这些问题简单总结一下. 首先,我们知道: python中一切都是对象,"everything is object",包括类,类的实例,数字,模块

python属性访问

#! /usr/bin/env python #! -*- cording:utf-8 -*- # # class C: # def __getattribute__(self, name): # print("getattribute") # return super().__getattribute__(name)#super默认找父类 # def __getattr__(self, name): # print("getattr") # def __setat

python属性查找 深入理解(attribute lookup)

在Python中,属性查找(attribute lookup)是比较复杂的,特别是涉及到描述符descriptor的时候. 在上一文章末尾,给出了一段代码,就涉及到descriptor与attribute lookup的问题.而get系列函数(__get__, __getattr__, __getattribute__) 也很容易搞晕,本文就这些问题简单总结一下. 首先,我们知道: python中一切都是对象,"everything is object",包括类,类的实例,数字,模块

python:属性查找与绑定方法

属性查找 类有两种属性:数据属性和函数属性 1.类的数据属性是所有对象共享的 # 类的数据属性是所有对象共享的,id是一样的 print(id(OldboyStudent.school)) # 4830576 print(id(s1.school)) # 4830576 print(id(s2.school)) # 4830576 print(id(s3.school)) # 4830576 2. 类的函数属性是绑定给对象用的,称为绑定到对象的方法 # 类的函数属性是绑定给对象使用的,obj.m

Python属性描述符(一)

描述符是对多个属性运用相同存取逻辑的一种方式,,是实现了特性协议的类,这个协议包括了__get__.__set__和__delete__方法.property类实现了完整的描述符协议.通常,可以只实现部分协议,如只实现了__get__或__set__,而不必把__get__.__set__和__delete__全部实现 现在,让我们用描述符协议升级上一个章节Python动态属性和特性(二)的LineItem类 图1-1 我们将定义一个Quantity类,LineItem类会用到两个Quantit

Python属性描述符(二)

Python存取属性的方式特别不对等,通过实例读取属性时,通常返回的是实例中定义的属性,但如果实例未曾定义过该属性,就会获取类属性,而为实例的属性赋值时,通常会在实例中创建属性,而不会影响到类本身.这种不对等的方式对描述符类也有影响. def cls_name(obj_or_cls): # 传入一个实例,返回类名 cls = type(obj_or_cls) if cls is type: cls = obj_or_cls return cls.__name__.split('.')[-1] d

python属性管理(1):基础

管理属性的几种方式 在python中访问.设置.删除对象属性的时候,有以下几种方式: 使用内置函数getattr().setattr()和delattr() 自己编写getter().setter().deleter()方法 重载__getattr__().__setattr__().__delattr__()运算符,这决定了x.y的访问.赋值方式以及del x.y的方式 使用__getattribute__()方法 使用描述符协议 使用property协议,它是一种特殊的描述符 本文简单介绍其

python 属性封装

120 1 #封装 2 3 class Person: 4 def __init__(self,name,passwd): 5 self.name=name 6 self.__passwd=passwd 7 8 def get_pwd(self): 9 return self.__passwd 10 11 Jack=Person("Jack","abc123") 12 13 print(Jack._Person__passwd) 14 print(Jack.get_