2018年4月19日笔记

  • 类的概念与声明

类(class):用来描述具有相同属性和方法的对象的集合。

一个类定义了该集合中每个对象所共有的属性和方法。

对象是类的实例(instance)。

声明一个类的一般形式如下:

  class ClassName(object):

    def funName(self):

      pass

一个类时,需注意以下几点:

  1. 类名首字母大写,类中函数(即方法)名首字母小写
  2. object是所有类的父类(superclass),默认所有类都继承object
  3. object不是必填项,但建议要写上object,可避免一些不必要的报错
  4. 类中函数默认第一个参数为self(必填项)
  5. self代表类的实例,而非类
  6. 类中变量(即属性)都要以self.xxx的形式来声明和使用
  7. 类中函数(即方法)也要以self.xxx的形式来调用
  8. 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self
  9. self 不是 python 关键字,我们把self换成xxx也是可以正常执行的
  • 类的构造器

定义:类在实例化时,首先必须要执行的函数。

__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法

  • 例1:用一个类来描述车,该类有3个属性分别为制造商、型号、生产年份,用2个方法分别来设置和获取车辆属性

  • 类的继承

派生类DerivedClass:即子类

基类BaseClass:即父类

子类声明的一般形式如下:

class DerivedClassName(BaseClassName):

  pass

当子类和父类不在同一个模块中时,子类的声明如下:

class DerivedClassName(modname.BaseClassName):

  pass

多继承时,子类的声明如下:

class DerivedClass(BaseClass1, BaseClass2, BaseClass3, ...)

  pass

使用继承时,强调以下几点:

  1. 子类存在与父类同名的方法时,则调用子类的方法
  2. 多继承时,多个父类有同名方法且在子类中未声明该方法时,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法,所以要特别注意圆括号中父类的顺序
  3. 使用super可以在子类中重写父类的方法,也可实现子类对象调用父类已被覆盖的方法
  • 类的私有属性与私有方法

__privateAttr:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。在类内部的方法中使用时 self.__privateAttr

__privateMethod:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类地外部调用。self.__privateMethod

  • 例2:电动车是车的子类,电动车有1个特有属性为电池容量(私有属性)

  • 拓展知识:如何在类外访问类的私有属性?

  Python为了保证不能再class之外访问该变量,Python会在类的内部自动的把你定义的__spam变量的名字替换成为 _classname__spam(注意,classname前面是一个下划线,spam前是两个下划线),Python把这种技术叫做“name mangling”。因此,用户在外部访问__spam的时候就会提示找不到相应的变量。

  但是,这并不是意味着我们真的就不能够从外部访问这个变量了,上面说Python在类的内部用_classname__spam替换了__spam,

因此,我们可以在类的外面使用_classname__spam来访问__spam。

  • 例3:在例2的基础上,在类外直接访问类的私有属性——电池容量

原文地址:https://www.cnblogs.com/karl-python/p/8895007.html

时间: 2024-11-05 21:59:00

2018年4月19日笔记的相关文章

2018年5月19日笔记

进程的概念 进程是程序在计算机上的一次执行活动. 进程可分为系统进程和用户进程. 所有正在运行的进程轮流使用CPU,任何一个时间点有且只有一个进程占用CPU. 进程与线程的区别 进程 > 线程 多进程使用CPU的多个核,适合运算密集型 多线程使用CPU的一个核,核心IO密集型 python多进程 -- muiltiprocessing模块 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程.Py

2018年5月8日笔记

CentOS 7上安装mysql # CentOS 7 安装mysql 1. 检测系统是否自带安装 mysql rpm -qa | grep mysql 2. 若已安装,可以进行卸载 rpm -e mysql //普通删除模式 rpm -e --nodeps mysql //强力删除模式,若普通删除时提示存在依赖文件,则进行强力删除 3. 安装mysql # centOS 7 yum install mariadb-server mariadb //在CentOS 7中,由于 MySQL数据库已

2018年4月26日笔记

内置模块:hashlib Python的hashlib提供了常见的摘要算法,如md5,sha1, sha224, sha256, sha384, sha512等等,其中md5最为常用. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示).md5算法得到的就是一个32位的16进制字符串. 一般用法如下:(python3环境中) 1 import hashlib 2 3 # python3 4 m1 = hash

2018年5月3日笔记

常用的正则表达式匹配规则 \d 表示一个数字字符,等价于 [0-9] \D 表示一个非数字字符,等价于 [^\d] \s 表示一个空白字符,等价于 [<空格>\t\r\n\f\v] \S 表示一个非空白字符,等价于 [^\s]\w 表示一个单词字符(数字或字母),等价于 [A-Za-z0-9_]\W 表示一个非单词字符,等价于 [^\w]. 匹配除换行符\n之外的任意一个字符 .* 在一行内,贪婪(尽可能多)匹配任意个字符 .*? 在一行内,非贪婪(尽可能少)匹配任意个字符 (?P<na

2018年5月13日笔记

SQL语句复习 创建一个库 create database DB_name; 授权一个用户 grant all privileges on *.* to 'user1'@'%' identified by 'qwe123'; 创建表 create table table_name(column_name type not null); 查询 select * from tabel_name where condition1 and condition2; 增加 insert into table

10月19日笔记

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>lianxi</title> <style> #bj,.tup{ width: 300px; height: 500px; position: relative; /*relative相对定位 相对于自己原来的位置移动*/ } #xia{ width: 300px; height:10

2018年1月19日 第七次小组会议

今天晚上在电四楼实验室进行了第七次小组会议. 期末考试已经结束,目前已经进入了寒假阶段,但是小组成员目前都在学校,我们计划最近大多数精力投入项目相关内容,并且较为频繁的召开会议,具体安排如下. 完成日历功能的相关功能,具体参考几个日历功能的网页,要求能够显示不同时间的日历区域,将DDL等消息填入对应位置,在已完成的各网页框架中加入获取数据库数据并显示在对应位置的代码,也就是网页主体功能的编写,并且在数据库中增加新的项目,改变数据结构等. 原文地址:https://www.cnblogs.com/

2018年3月19日推荐文章精选,让您一篇内容阅尽好文

数据分析之A股市场技术分析是否可行 作者:youerning简介:这里并不是为了说明技术分析可行,也不是为了说明技术分析不可行,仅是以我浅薄的知识验证一些事情,测试方法及测试结果都会公布如下,至于测试方法是否严谨, 就请读者自行判断吧. 秒杀架构设计 作者:曹林华简介:最近在部门内部分享了原来在电商业务做秒杀活动的整体思路,大家对这次分享反馈还不错,所以我就简单整理了一下,分享给大家参考参考 对某入侵网站的一次快速处理 作者:simeon2005简介:凌晨1点,接到朋友的求助,网站被黑了,访问网

2018年3月19日循环for语句 if语句

if语句: if(表达式){ 代码 }else if(表达式){ 代码 } for循环: for(var i=0; i<10; i++){ alert(1); (弹窗) } while循环: while(表达式){ 代码 } 使用场景 For 次数确定的时候使用 While 直到满足摸个条件的时候终止循环 两个关键字: break    结束循环(终止) continue  跳过本次循环 for(var i=0; i<10; i++){ break :或者 continue } 注意: 1.不