Python基础知识详解 从入门到精通(七)类与对象
本篇主要是介绍python,内容可先看目录
其他基础知识详解,欢迎查看本人的其他文章
Python基础知识详解 从入门到精通(一)介绍
Python基础知识详解 从入门到精通(二)基础
Python基础知识详解 从入门到精通(三)语法与函数
Python基础知识详解 从入门到精通(四)列表、元组、字典、集合
Python基础知识详解 从入门到精通(五)模块管理
Python基础知识详解 从入门到精通(六)文件操作
PS:很多人在学习Python的过程中,往往因为遇问题解决不了或者没好的教程从而导致自己放弃,为此我整理啦从基础的python脚本到web开发、爬虫、django、数据挖掘等【PDF等】需要的可以进Python全栈开发交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目可拿,不懂的问题有老司机解决哦,一起相互监督共同进步
定义类
注意,若类的方法与属性名一样。则属性会覆盖方法
一个类可以产生无数的对象,当对象的方法被调用时候,对象会将自身作为第一个参数作为self参数传给方法,这样子就可以分辨是哪一个变量在调用这个方法,所以定义方法时候第一个参数必定是self
关于self 不理解也没关系,每一个函数都放在第一个函数即可
__ init __(self) 是魔法方法用于传参数,使用方法如下
在类实例化开始时会自动被调用,可以用于一些开始时候需要做的事
用了__init__可以直接在生成对象时候传参数
但是注意__init__不能返回数据,它默认放回None
关于魔法方法后期文章解释
def aa():
print('dd')
class aa :
“这是类的说明” # 用类名.__doc__ 可以输出
g = 3
def jj(self):
aa() #可以调用全局函数
print(‘jjjjj’)
class bb:
#属性,,,,,,就是变量的值,,,比如鱼是红色的,多大,这些是属性
a= 1
b = ‘sssss’ #这是类属性,所有实例共有的,只要一个实例修改了它,全部实例都改变
#方法 就是类内的函数
def sename(self,name):
self.name = nema #如self.xxxx是实例属性,每个实例互不影响
def pr(self)
print(self.name)
def hhh(self):
pass
class cc:
def __init__(self,name)
self.name = name
self.pr #可以调用下面的函数
def pr(self)
print (self.name)
使用
实例名.__dict__可以查看实例的属性(字典类型)
类名.__dict__可以查看类的属性(字典类型)
以上定义中aa为类,a为实例对象
还可以直接使用类对象 如aa.g 这是类对象
为了区分函数与类
约定类大写开头,函数小写开头
如实例对象
a = aa()
a.jj()
#结果为 jjjjj
a = bb()
a.setname(‘gfx’)
a.pr()
#结果为gfx
#如cc中使用了__init__可以直接在生成对象时候传参数
a = cc(‘gfx’)
a. pr()
#结果为gfx
#实例对象可以直接加属性
#如a.hh = 8 相当于加一个hh属性
#实例对象使用时可以修改属性的值
#a.g +=3
#则a.g 结果为6
使用类对象
如
a = aa()
b = aa()
c = aa()
#a,b,c是不同的实例对象
#如a.g 结果为3
b.g 结果为3
a.g +=3
#则a.g 结果为6
b.g 结果为3
#但若使用类对象,会直接改变类的属性
aa.g = 8
#则a.g 结果为8
b.g 结果为8
访问属性
如
a.g 可以访问
也可以
用getattr(实例对象名,‘属性名’,‘若无此属性返回内容’)
但是方法只有实例对象才能调用,这个也是python的绑定概念
定义了实例对象,再删除该类,这个实例对象也是可以用的,
私有定义
由双下划线开头的为私有定义 __ a
不可被外部调用,只能内部
如
class dd:
__a = 4
def get(self)
return __a
#使用
g =dd
g.__a #不合法
外部使用私有变量
假如要在外部用a,需要借助方法get
g.get() 即可
实际上python的私有是一种 ‘假私有’(名字重整)
这是改变了变量名字 改为 __类名__变量名
所以g.__dd__a也可以在外部调用
继承操作:
class 类1名(类2名): 继承操作:类1继承类2的方法和属性
不能继承私有方法和属性
继承是有顺序的,从左往右,若有同名方法或属性,先继承前面的,后面的被屏蔽
如果子类中还定义与父类同名的方法或属性,则自动覆盖父类的对应的方法或属性
注意子类中再用__init__可能会覆盖父类中的需要的变量
解决方法有两个
一. 调用未绑定的父类方法
如 定义子类时 父类名.__ init __(self)即可
二. 使用super函数
用法在子类中 super().父类中需要的方法名()
如 super().__ init __() 可以自动找父类,以后也不用修改
可以多重继承,class 类1名(父类1名,父类3名,父类四名……):
如class ff (aa,cc,dd):
组合
即多个对象的组合、
就是把类的实例化放到另一个组合里
如
class a :
def __init__(self,x)
self.num = x
class c :
def __init__(self,y)
self.num = y
class d :
def __init__(self,x,y)
self.a = a(x)
self.c = c(y)
def pr(self)
print(‘a有%d个,c有%d个‘%(self.a.num , self.c.num)
结果为
g = d (3,4)
A有3个,c有4个
相关的BIF(内置函数)
issubclass(class,classinfo)
若第一个参数class 是第二个参数的子类或者本身返回true 否则返回false
第二个参数可以是一个元组,里面有各个类,只有其中一个是第一个的父类即符合条件
如issubclass(class,object) 返回true,,,,object是所有类的一个基类,所有类默认继承object
isinstance(实例对象名,classinfo)
检擦实例对象是否属于第二个参数类,是则返回true 否则则反之
第二个参数可以是一个元组,里面有各个类,只有其中一个即可
如果第一个参数不是传入对象,一直返回false
hasattr(对象名,name)
若对象里面有第二个参数这个属性,有则true,name是一个字符串有‘‘ 或“”
getattr(对象名,name [, default])
返回对象指定属性的值,若指定属性不存在将[, default的值打印出来,若不输入[, default]则返回异常
s etattr(对象名,name ,value)
设定对象中指定属性的值,若属性不存在则新建一个属性并赋值
delattr(对象名,name)
删除对象的指定属性,若属性不存在则异常
Property (fget = None, fset =None ,fdel = None,doc = None)
去设置一个存在的属性
Fget,是获取属性的方法
Fset设置属性的方法
Fdel删除属性的方法
但是具体方法要自己传入
使用
class q:
def __init__(self,size=10):
self.size = size
def get(self):
return Self.size
def set(self,value):
self.size = value
def dellll ():
del self.size
x = property (get, set,dellll)
则
设置size
q.x = 78
使用size
q.x
删除size
del q.x
说到这里。
很多人在学习Python的过程中,往往因为遇问题解决不了或者没好的教程从而导致自己放弃,为此我整理啦从基础的python脚本到web开发、爬虫、django、数据挖掘等【PDF等】需要的可以进Python全栈开发交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目可拿,不懂的问题有老司机解决哦,一起相互监督共同进步
本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
Python基础知识详解 从入门到精通(七)类与对象的更多相关文章
- RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙
消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以 ...
- RabbitMQ基础知识详解
什么是MQ? MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中 ...
- Cisco路由技术基础知识详解
第一部分 请写出568A的线序(接触网络第一天就应该会的,只要你掐过,想都能想出来) .网卡MAC地址长度是( )个二进制位(16进制与2进制的换算关系,只是换种方式问,不用你拿笔去算) A.12 ...
- 《python基础教程(第二版)》学习笔记 类和对象(第7章)
<python基础教程(第二版)>学习笔记 类和对象(第7章) 定义类class Person: def setName(self,name): self.name=n ...
- Thrift入门初探(2)--thrift基础知识详解
昨天总结了thrift的安装和入门实例,Thrift入门初探--thrift安装及java入门实例,今天开始总结一下thrift的相关基础知识. Thrift使用一种中间语言IDL,来进行接口的定义, ...
- 直播一:H.264编码基础知识详解
一.编码基础概念 1.为什么要进行视频编码? 视频是由一帧帧图像组成,就如常见的gif图片,如果打开一张gif图片,可以发现里面是由很多张图片组成.一般视频为了不让观众感觉到卡顿,一秒钟至少需要16帧 ...
- 第157天:canvas基础知识详解
目录 一.canvas简介 1.1 什么是canvas?(了解) 1.2 canvas主要应用的领域(了解) 二.canvas绘图基础 2.0 sublime配置canvas插件(推荐) 2.1 Ca ...
- Redis基础知识详解(非原创)
文章大纲 一.Redis介绍二.Redis安装并设置开机自动启动三.Redis文件结构四.Redis启动方式五.Redis持久化六.Redis配置文件详解七.Redis图形化工具八.Java之Jedi ...
- Maven基础知识详解
1. 简介 Maven在Java领域的应用已经非常广泛了,有了Maven的存在是的开发人员在搭建.依赖.扩展和打包项目上变得非常简单. 2. Windows安装Maven 下载安装包 http ...
随机推荐
- JS中axios使用注意点
今天遇到这样一个问题,前端会同时弹出成功和失败的两个提示框,由于不是本人操作,也没有怀疑是前端代码的问题,就索性根据后端的日志作为分析依据,开始个人以为是后端接口上班了两次结果,一个是成功,另外一个是 ...
- Echart的使用legend遇到的问题小记
Echart的图标真的很漂亮,使用也相对简单.但是官网的配置项的例子我不是很能快速的使用,得思考一会.哈哈,可能我比较笨吧. 在作柱状图的时候,我是通过Ajax动态获取的数据,但是图例legend就是 ...
- android 直接添加一个Fragment到activity,不需要额外setContentView
getSupportFragmentManager().beginTransaction().replace(android.R.id.content,new ArticleListFragment( ...
- python使用selenium驱动chromium防止浏览器自动升级失效!
python爬虫或者自动化项目中有时会用到selenium自动化测试框架,驱动chrom时由于谷歌浏览器自动升级,会造成驱动和浏览器版本不匹配问题,这时可以用到Chromium,这是谷歌推出用于开发目 ...
- 基于Python的face_recognition库实现人脸识别
一.face_recognition库简介 face_recognition是Python的一个开源人脸识别库,支持Python 3.3+和Python 2.7.引用官网介绍: Recognize a ...
- rest_framework:版本控制
一.作用: 用于版本的控制,区分不同的功能,对于一些新增功能的添加更新就会在新的版本中体现,有点类似于,新版本就是软件发布的新版本,和老版本相比新增或者修改了一些功能 二.内置的版本控制类: from ...
- 颜色color转为rgb格式
function convertHexToRGB(color) { if (color.length === 4) { let extendedColor = &q ...
- Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) C Messy
//因为可以反转n次 所以可以得到任何可以构成的序列 #include<iostream> #include<string> #include<vector> us ...
- 安装破解pycharm2018版
1.安装2018版pycharm: 2.把破解补丁放在一个地方(目录无中文,无空格): 3.在 Pycharm安装目录的\bin目录下找到 pycharm.exe.vmoptions 和 pychar ...
- 堆(Heap)和栈(Stack)
详细可以查看这篇文章:https://www.cnblogs.com/qingtianMo/p/5255121.html 栈保存代码执行(调用)的路径,堆负责保存对象(数据) 栈相当于摞盒子,进入一个 ...