首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python学习笔记6.3-类属性函数(@property)

,但是调用过程不一样(虽然其实也就是多一个括号而已),那么有没有一种办法,使得我们调用属性时候就会自动调用相应方法,也就是增加一些额外处理过程(例如类型检查或者验证)。...('Can not delete the name') AttributeError: Can not delete the name 正如例子中这样。...上面例子中两种写法,一般倾向于第二种写法,特别是如果需要对某个普通属性额外增加处理步骤,可以在不修改已有代码情况下将这个属性提升为一个property。...do not need (): c.area instead of c.area() print(c.perimeter) 78.53981633974483 31.41592653589793 这样写法就会使得实例接口变得统一...个人建议,不要在代码中不断重复使用@property,这样会使得代码变得臃肿,而且难以阅读,容易出错。同样任务,利用描述符或者闭包也能够很好完成(以后会详细解释)。

55580
您找到你想要的搜索结果了吗?
是的
没有找到

Python 学习笔记之类与实例

2、组合(composition,has-a)了哪些部件 组合可用来表述该车使用了哪些零部件,比如最新发动机。 类与模块不同之处 1、类可生成多个实例。2、类可被继承和扩展。...3、类实例生命周期可控。4、类支持运算符,可按需重载。 这些特性模块没有或者不需要,同时,模块粒度大,模块可用来提供游戏场景级别的解决方案,而类则是该场景下特定家族和演员。...其既不接收实例引用,也不参与类型处理,所以就没有自动传入第一参数。使用静态方法,更多原因是将类型作为一个作用域,或者当前类型添加便捷接口。...__ new __:构造方法,创建对象实例 __ init __:初始化方法,设置实例相关属性 __ del __:析构方法,实例被回收时调用 创建实例,会先调用析构方法和初始化方法。...五 总结 学习到此,我总算把类创建,属性和方法等弄清楚了,我最想强调一点,希望读者把 实例 self 参数弄明白,后续编码过程中使用较多。 还要清楚实例方法和静态方法区别。

41510

OOP 三大特性:封装中 property

Python 没有像 Java 等某些语言那样,以 public 和 private 等关键词定义类,可以说所有的类都是 pbulic ,8.7.1节介绍以命名“私有化”形式实现封装,也不是 Java...为了实现密码只读需求,使用了注释(1)所示装饰器 @property ——这个装饰器是基于内置函数 property() ,并且将原来方法 get_pwd() 更名为 password() (如注释...重新载入 mypassword 模块(参阅8.5.2节,最简单方法是在交互模式中执行 exit() 函数退出后,在进入交互模式),执行如下操作: >>> from mypassword import...但,注释(4)貌似成功了,其实这也没有修改 laoqi.password 值,只是为实例 laoqi 增加了一个名为 __password 实例属性。如此,实现了密码“只读”功能。...("Can't delete attribute") AttributeError: Can't delete attribute 重点看注释(12)操作结果,之所抛出异常,是因为在程序中注释(11

46910

Python - 描述器

很多时候我们可能需要对某个实例属性加上除了修改、访问之外其他处理逻辑,例如 类型检查、数值校验等,就需要用到描述器 ---《Python Cookbook》 我们可以使用 Python 自带 property..._age = value 试一试,的确如代码写一样,对属性类型进行了检查,而且使用了 property 装饰器之后,对 age 方法访问和对属性访问一样,不需要加 () >>> a = Person...__get__ 方法 是通过 __getattribute__ 调用,实际上,Python 中访问实例属性,__getattribute__ 就会被调用,__getattribute__ 会查找整个继承链...,直到找到属性,如果没有找到属性,但是定义了 __getattr__ ,那么就会调用 __getattr__ 去查找属性,否则抛出 AttributeError __getattribute__ 代码用...,如果实例字典中有与描述器同名属性,如果是资料描述器,则优先使用资料描述器,否则使用实例字典中属性 class AbsPriorityDescriptor: def __init__(self

87030

Python @property

prerequisite: Python装饰器 在面向对象编程中,我们通常希望一个类属性具有一定程度封装性,其他对象只能通过定义好接口访问这些属性,而不能够随意修改。...在Python中如果我们不希望类方法被修改,可以使用@Property装饰器。它可以修饰方法,将该被修饰方法转为相同名称只读属性;也可以与属性配合使用,来防止属性被修改。...即@Property装饰器常见使用场景有两个: 将方法转化为同名属性 与类属性配合使用,防止属性被修改 将方法转化为同名属性 class Data: @property def printnum_with_property...,不能在通过对象名.方法名()访问到,只能是使用访问属性方法即对象名.方法名来访问。..._count中下划线可以不加,语法上也没有错误,但这种写法强调来_count是类一个固有属性,是推荐写法。

41710

【Python基础】Python3十大经典错误及解决办法

9# Python将变量s视为一个本地局部变量,但该变量未初始化。 解决方法: 在函数内使用全局变量使用global关键字对其进行声明即可。...八、 AttributeError 属性错误 报错信息: 1AttributeError: 'tuple' object has no attribute 'append' 2AttributeError...错误示例2: 1df = pd.read_excel(r'data.xlsx') 2df.col 3# 错误原因:DataFrame没有col属性,应该为columns。...解决方法: 正确书写类属性名,不要发生书写错误。深刻理解元祖,列表区别,可将元祖转换为列表添加元素。...解决方法: 这种报错常见于两种场景中,第一、未下载、安装该模块;第二、将调用模块路径与被调用模块路径不一致等。

1.7K30

一文教你读懂 Python 中异常信息

AttributeError 当你访问一个对象属性,但是这个属性没有在这个对象定义时候,就会引发 AttributeError。...' object has no attribute 'b' AttributeError 错误消息行告诉我们特定对象类型(在本例中为 int)没有访问属性, 在这个例子中属性为 b。...ImportError 在使用 import 导入模块,如果要导入模块找不到,或者从模块中导入模块中不存在内容。...import 导入一个不存在模块,就会出现 ModuleNotFoundError 错误,Traceback 最下面一句信息给出了原因, 没有名为 aaa 模块....并没有太多内容,但是,结合上面的错误信息,就可以解决这个问题。 NameError 当你引用了变量、模块、类、函数或代码中没有定义其他名称,将引发 NameError。

2.4K10

【Python基础】Python3十大经典错误及解决办法

9# Python将变量s视为一个本地局部变量,但该变量未初始化。  解决方法:在函数内使用全局变量使用global关键字对其进行声明即可。  ...八、 AttributeError 属性错误  报错信息:  1AttributeError: 'tuple' object has no attribute 'append' 2AttributeError...错误示例2:  1df = pd.read_excel(r'data.xlsx') 2df.col 3# 错误原因:DataFrame没有col属性,应该为columns。  ...解决方法:正确书写类属性名,不要发生书写错误。深刻理解元祖,列表区别,可将元祖转换为列表添加元素。  ...解决方法:这种报错常见于两种场景中,第一、未下载、安装该模块;第二、将调用模块路径与被调用模块路径不一致等。

2.1K30

Python 从attribute到property详解

not be changed' AttributeError: can't set attribute 有两点需要注意: foo.name确实已经不能通过foo.name = …来修改了, 即, foo.name...将foo.name从attribute变成property之后, 它访问方式并没有改变. 也就是说, 对外接口没有改变....这个优点可以让我们从容写代码, 不用在一开始就纠结于是使用property还是attribute, 因为可以都使用attribute, 如果有需要, 以后可以在不影响外部代码前提下随时修改....Python风格是读与写都通过属性名进行: print(item.price) item.price = -10 这样做好处之前提到过: 将attribute改写成property不会改变对外接口...那么, 如何在执行item.price = -10检验-10合法性呢? 最直白方法是在__setattr__方法里设置拦截, 但很麻烦, 特别是当需要验证属性很多时.

1.4K30

《流畅Python》第十章学习笔记

把协议当作正式接口 repr reprlib.repr用于生成大型结构或递归结构安全表示形式。 它会限制输出字符串长度,用「…」表示截断部分。...注意:调用__repr__函数目的是调试,因此绝对不能抛出异常,尽量输出有用内容,让用户能够识别目标对象。 协议 在面向对象编程中,协议是非正式接口,只在文档中定义,在代码中不定义。...协议是非正式没有强制力,因此如果知道类具体使用场景,通常只需要实现一个协议部分。...切片对象具有仅会返回对应参数值(或其默认值)只读数据属性 start, stop 和 step。它们没有其他显式功能;不过它们会被 NumPy 以及其他第三方扩展所使用。...切片对象也会在使用扩展索引语法被生成。例如: a[start:stop:step] 或 a[start:stop, i]。

30120

Python中内置异常你知道那些,欢迎留言评论~~~

可以使用local()内置函数来查看这些内置异常,如下所示: >>> locals()['__ builtins__'] 这将返回内置异常,函数和属性字典。...此类负责使用传递参数使用str()创建异常字符串表示形式。如果没有参数,则返回一个空字符串。 args: args是提供给异常构造函数参数元组。...当属性引用或分配失败(例如,引用了不存在属性,将引发AttributeError。...,当找不到模块,import会引发该子类。...当解释器检测到超过最大递归深度,将引发此异常。 异常ReferenceError 当在垃圾回收之后使用弱引用代理访问引用对象属性,引发ReferenceError。

2.9K10

【Python】已解决报错:AttributeError: module ‘json‘ has no attribute ‘loads‘解决办法

但是运行了如下代码时候,它竟然提示:AttributeError: module ‘json’ has no attribute ‘loads’,翻译成汉语意思是:属性错误:json模块没有loads...然而,在使用json模块,开发者可能会遇到AttributeError: module ‘json’ has no attribute 'loads’错误。...这意味着在尝试使用一个不存在属性或方法。 二、可能错误原因 错误模块名称 可能是我们错误地引用了json模块。...模块使用了错误导入方式。...所以以后需要注意以下几点: 确保在导入模块使用正确模块名,避免使用错误模块或拼写错误。 在调用模块属性或方法使用正确属性或方法名,避免拼写错误。

8910

特性(property)

6.4 特性(property) 1 什么是特性property property是一种特殊属性,访问它时会执行一段功能(函数)然后返回值 import math class Circle:...  注意:此时特性arear和perimeter不能被赋值 c.area=3 #为特性area赋值 ''' 抛出异常: AttributeError: can't set attribute '''...2 为什么要用property 将一个类函数定义成特性以后,对象再去使用时候obj.name,根本无法察觉自己name是执行了一个函数然后计算出来,这种特性使用方式遵循了统一访问原则 除此之外...不说“女儿”,就像“parent”本来是“父母”意思,但中文都是叫“父类”)公开 【private】 这种封装对谁都不公开 python并没有在语法上把它们三个内建到自己class机制中,在C++...里一般会将所有的所有的数据都设置为私有的,然后提供set和get方法(接口)去设置和获取,在python中通过property方法可以实现 class Foo: def __init__(self

73630

python json.loads 中文_Python 完美 json loads

为了对付表单提交参数多和 json 结构复杂情况,我写了一个名为 recursive_json_loads 处理函数来对请求对象递归调用 json.loads() 以期能够一次性将所有参数转化为更好用...self[key] 改成 self.get(k),从而避免在访问不存在触发属性异常。...k=0) 有一点需要注意是,对于传了参数而没有传值情况(?k=),k 值会是 ”,而且 isinstance(”, str) 会返回 True。...= ” and not isinstance(data.k, int): return error() 因为 Python 会把很多种如 len() 为零对象布尔值判断为 False,所以上面始终没有使用...补充,Storage 类一个缺点是:他有 __dict__ 属性,但该属性永远为空 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

73420
领券