文档章节

Python3类的特殊方法

ZeroBit
 ZeroBit
发布于 07/20 17:12
字数 599
阅读 8
收藏 0

常见的特殊方法

__repr__() 对象转字符串方法

__repr__() 方法实现这样一个功能:当程序员直接打印该对象时,系统将会输出该对象的“自我描述”信息,用来告诉外界该对象具有的状态信息。

class Apple:
    def __init__(self, color, weight):
        self.color = color
        self.weight = weight

    def __repr__(self):
        return "Apple [color = " + self.color + ", weight = " + str(self.weight) +"]"

a = Apple("红色", 5.68)
print(a) # 输出 Apple [color = 红色, weight = 5.68]

__del__() 析构方法

对象被销毁时自动执行的方法

__dir__() 方法

用于列出该对象内部的所有属性(包括方法)名,该方法将会返回包含所有属性(方法)名的序列

__dict__ 属性

用于查看对象内部存储的所有属性名和属性值组成的字典

__getattr__()、__setarr__() 等方法

当程序操作(包括访问、设置、删除)对象的属性时,Python系统同样会执行该对象特定的方法

  • __getattribut__(self, name):当程序访问对象的 name 属性时被自动调用
  • __getattr__(self, name):当程序访问对象的 name 属性且该属性不存在时被自动调用
  • __setattr__(self, name):当程序对对象的 name 属性赋值时被自动调用
  • __delattr__(self, name):当程序删除对象的 name 属性时被自动调用

与反射相关的属性和方法

动态操作属性

在动态检查对象是否包含某些属性(包括方法)相关的函数有如下几个

  • hasattr(obj, name):检查 obj 对象是否包含名为 name 的属性或方法
  • getattr(obj, name[,default]):获取 obj 对象中名为 name 的属性的属性值
  • setattr(obj, name, value):将 obj 对象的 name 属性设为 ```value``

__call__属性

上面的 hasattr() 函数可以判断指定属性(或方法)是否存在,但到底是属性还是方法,则需要进一步判断它是否可调用

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Leo Song

class User:
    def __init__(self, name, passwd):
        self.name = name
        self.passwd = passwd

    def validLogin(self):
        print("验证%s的登录" % self.name)

u = User("alex", "abc123")

print(hasattr(u.name, '__call__')) # False
print(hasattr(u.validLogin, '__call__')) # True

© 著作权归作者所有

ZeroBit

ZeroBit

粉丝 1
博文 58
码字总数 49861
作品 0
南宁
私信 提问
【ZZ】Python下划线与命名规范

Python下划线与命名规范 以下分四种情况说明下划线的作用,python对成员域没有严格控制,大部份只是作为命名规范存在,以下英文部份摘自python官方网站 singleleadingunderscore: weak "int...

学徒1986
2013/09/03
1K
0
Python基础总结成千行代码,让Python入门更简单!

只要学会这千行代码,不管你是零基础还是弱基础或是没有接触过编程,都可以快速入门Python!当时我就不信邪啊,等我看完之后,即使作为一个Python老鸟了,还是领会到了很多教授他的独特见解!...

糖宝lsh
2018/09/10
232
0
学习笔记(11月07日)--类

四周二次课(11月7日) 一、 类的重写 1.1 重写一般方法 class A: def hello(self): print('Hello,i am A.')class B(A): passa = A()b = B()a.hello()b.hello() 结果: Hello,i am A.Hello,i......

wanyang_wanyang
2018/07/03
0
0
Python中的类、对象、继承

类 Python中,类的命名使用帕斯卡命名方式,即首字母大写。 Python中定义类的方式如下: class 类名([父类名[,父类名[,...]]]): 省略父类名表示该类直接继承自,类的实例化如下: class Pers...

雪飞鸿
2016/11/03
0
0
(总结)python 3程序开发指南(六)面向对象程序设计

1.在python中每个内置的类、类库以及我们创建的每个类都直接或间接地从最顶层的基类----object类衍生而来。 2.我们可以通过在类中实现len、add方法来支持len()、add()函数 3.python面向对象编...

索隆
2012/04/27
258
0

没有更多内容

加载失败,请刷新页面

加载更多

只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
昨天
61
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
昨天
29
0
全世界到底有多少软件开发人员?

埃文斯数据公司(Evans Data Corporation) 2019 最新的统计数据(原文)显示,2018 年全球共有 2300 万软件开发人员,预计到 2019 年底这个数字将达到 2640万,到 2023 年达到 2770万。 而来自...

红薯
昨天
66
0
Go 语言基础—— 通道(channel)

通过通信来共享内存(Java是通过共享内存来通信的) 定义 func service() string {time.Sleep(time.Millisecond * 50)return "Done"}func AsyncService() chan string {retCh := mak......

刘一草
昨天
59
0
Apache Flink 零基础入门(一):基础概念解析

Apache Flink 的定义、架构及原理 Apache Flink 是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态或无状态的计算,能够部署在各种集群环境,对各种规模大小的数据进行快速...

Vincent-Duan
昨天
62
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部