python 类的魔法函数 内置函数 类方法 静态方法 抽象类
魔法函数
__init__函数
init函数会在实例化A这个类的时候被调用
class A():
def __init__(self):
print('__init__函数') a = A()
显示结果:
__init__函数
__call__函数
class A():
def __call__(self):
print('__call__函数') a = A()
a()
显示结果:
但类被当成一个函数的时候会被调用
如果不写A类的call函数的话,会怎么在运行程序会怎么样呢?
Traceback (most recent call last):
File "D:/网站开发/oop/内置函数.py", line 6, in <module>
a()
TypeError: 'A' object is not callable
A类就会报一个typeerror的错误,大致的一个就是这个类不能当成一个函数来调用
__str__函数
class A():
def __str__(self):
return '被当成了字符串' a = A()
print(a)
str函数是将实例化的对象可以当做一个字符串来返回。
如果不写,再来看看会显示什么?
class A():
pass a = A()
print(a)
<__main__.A object at 0x0000017E14B05D30>
就会把a的实例化地址显示出来
以上这三个函数都有一个相同的特征——无需调用,但需要在特定的时间才能触发。
其他内置函数
__dict__函数:
以字典的方式显示类的成员组成
__doc__函数:
获取文档信息——就是写在类最前面的注释
__name__函数:
获取类的名称,如果在模块中使用,获取模块的名称
__bases__函数:
获取某个类的所有父类,以元组的方式显示
class People():
# 实例方法
def eat(self):
print(self)
print('eating') # 类方法
@classmethod
def play(cls):
print(cls)
print('playing') # 静态方法:不需要第一个参数是self或cls
@staticmethod
def read():
print('reading') a = People()
调用实例方法:
a.eat()
People.eat()
实例方法只能用实例来调用
无法用类来调用
调用类方法:
a.play()
People.play()
类方法可以被类调用,也可以被实例调用
静态方法:
a.read()
People.read()
静态方法可以被类调用,也可以被实例调用
三种方法我认为最主要的不同点在于参数的问题。
因为我们所需求的参数不同,所以会去选择不同的方法来调用。
property
当我们想使用的成员属性不是我们想要的属性时,使用property属性,可以使数据变成我们想要的样子。
class People:
def __init__(self, name):
self.name = name def fget(self):
self.name = self.name.lower()
return self.name def fset(self, name):
self.name = name + '被修改' def fdel(self):
print('不能删除') name2 = property(fget, fset, fdel, '这个property')
a = People('ANN')
print(a.name)
print(a.name2)
显示结果:
ANN
ann
当显示a的name2属性时,会触发fget函数。
这样做就可以把所以的大写字母变成小写的字母,虽然调用函数也可以做到,但直接用以有的属性进行调用会减少代码的重复。
a.name2 = 'bee'
print(a.name)
print(a.name2)
显示结果:
bee被修改
bee被修改
当想要修改name2的值时,会触发fset函数
del a.name2
显示结果:
不能删除
当想要删除name2时,触发了fdel函数
我在这里想到的时,类的任何操作都是人来实现的,当你认为他写的函数不能满足你的开发需求时,
你就可以去修改他的方法,无论是print还是复制操作,都是一些封装好的函数,
而这些函数我们是可以进行修改的。
抽象函数
import abc
class People(metaclass=abc.ABCMeta): # 定义一个抽象的方法
@abc.abstractmethod
def eat(self):
pass #定义一个抽象类的方法
@abc.abstractclassmethod
def drink(cls):
pass # 定义一个静态抽象方法
@abc.abstractstaticmethod
def work():
pass
定义一个抽象类的目的:就是为了可以规范不同人的代码
使用抽象类注意的问题:
- 抽象类中可以包含抽象方法,也可以包含具体方法
- 抽象类中可以有方法,也可以有属性
- 抽象类不能直接实例化
- 子类可以不实现所有的抽象方法,这时子类则不能实例化。
python 类的魔法函数 内置函数 类方法 静态方法 抽象类的更多相关文章
- python类与对象的内置函数大全(BIF)
关于类与对象的一些常用BIF(内置函数) 1.issubclass(class,classinfo) 含义:如果class是classinfo的子类,则返回True,否则返回false,用来判断子类关 ...
- python全栈开发-Day13 内置函数
一.内置函数 注意:内置函数id()可以返回一个对象的身份,返回值为整数. 这个整数通常对应与该对象在内存中的位置,但这与python的具体实现有关,不应该作为对身份的定义,即不够精准,最精准的还是以 ...
- Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数
Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数 目录 Pycharm使用技巧(转载) Python第一天 ...
- python 匿名函数&内置函数
匿名函数:为了解决那些功能很简单的需求而设计的一句话函数怎么定义匿名函数: cal = lambda x : x*x # cal是函数名,lambda是定义匿名函数的关键字 冒号前面的额x是参数即函数 ...
- python基础12_匿名_内置函数
一个二分查找的示例: # 二分查找 示例 data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35, 36, ...
- python成长之路八 -- 内置函数
1,python内置函数 内置函数 abs() dict() help() min() setattr() all() dir() hex() next() slice() a ...
- 【python】dir(__builtins__)查看python中所用BIF(内置函数)
dir(__builtins__)查看python中所用BIF(内置函数)
- 查看python内部模块命令,内置函数,查看python已经安装的模块命令
查看python内部模块命令,内置函数,查看python已经安装的模块命令 可以用dir(modules) 或者用 pip list或者用 help('modules') 或者用 python -m ...
- Python学习(八) —— 内置函数和匿名函数
一.递归函数 定义:在一个函数里调用这个函数本身 递归的最大深度:997 def func(n): print(n) n += 1 func(n) func(1) 测试递归最大深度 import sy ...
- python学习 day013打卡 内置函数
本节主要内容: 内置函数: 内置函数就是python给你提供的.拿来直接用的函数,比如print,input等等.截止到python版本3.6.2 python一共提供了68个内置函数.他们就是pyt ...
随机推荐
- 如何使用纯 CSS 制作四子连珠游戏
序言:你是否想过单纯使用 CSS 也可以制作一款游戏?甚至可以双人对决!这是一篇非常有趣的文章,作者详细讲解了使用纯 CSS 制作四子连珠游戏的思路以及使用奇淫巧技解决困难问题的方法.因为案例本身比较 ...
- Markdown语法基础
Markdown基本语法 创建 2018-09-07 by YANHAI 标题:Setext方式 三个或更多 大标题 === 小标题 --- 大标题 小标题 标题:Atx方式 # 内容 (一级标题) ...
- Quill 富文本编辑器
Quill 富文本编辑器 https://quilljs.com/ https://github.com/quilljs/quill https://github.com/quilljs/awesom ...
- 通过Linq查找重复数据
一.模拟初始化集合数据 List<Student> students = new List<Student>() { new Student(){ Age=18,Name=&q ...
- Centos 6.5下mysql 8.0.11的rpm包的安装方式
1.系统版本及mysql下载地址 操作系统:Centos 6.5(Centos 7.4下载对应的mysql版本安装同理) mysql数据库版本:mysql8.0.11 mysql官方网站:http:/ ...
- Linux下批量管理工具pssh安装和使用
Linux下批量管理工具pssh安装和使用 pssh工具包 安装:yum -y install pssh pssh:在多个主机上并行地运行命令 pscp:把文件并行地复制到多个主机上 prsync:通 ...
- logstash的output配置中指定elasticsearch的template
转自:https://blog.csdn.net/felix_yujing/article/details/78930389 之前采用的是通过filebeat收集nginx的日志,直接到elastic ...
- CF1152E Neko and Flashback--欧拉路径
RemoteJudge 第一次见到欧拉路径的题 注意到\(b\)和\(c\)的构造方法很特殊,即对于一个位置(经过\(p\)作用后)\(i\),若两个数分别为\(b_i\)和\(c_i\),那么在\( ...
- angular 官网英雄案例 报错整理
1.导入of 报错 import { of } from 'rxjs/observable/of'; 2. 服务注入报错 在app.module.ts引入 3.使用angular-in-memory- ...
- Luogu P4716 【模板】最小树形图
题目链接\(Click\) \(Here\) 不知道有什么用的一个东西.本来不打算再大量扩知识点了但还是学一下好了,反正也不难. 原理:树上父亲唯一,每次选最短的父边. 此时会有两类情况: 就这样正常 ...