day06 Python class基础篇
一.目录
1.类与对象的概述
2.封装
3.继承
4.多态
5.类的成员
6.类与类之间的关系
7.私有
二. 内容讲解
一.类与对象的概述
类是对一系列具有相同属性的事物的抽象,相同于设计图纸,而对象则是某个具体的事物,两者之间的关系对象是基于类来实现的。类是对对象的描述,类里面一般包含属性和方法,而属性的设置一般通过__init__()构造 函数来实现,其他的函数在类里面称为方法,因为比普通函数都了一个self。
类是负责描述对象的 -> 类型
定义属性和方法
对象是通过类来创建的具体的个体. 每个对象都有自己的独立的名称空间 执行动作的时候最好是使用对象去执行. self : 当前正在执行方法的对象
实例1:创建类和对象
class Person:
def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender def talk(self):
print("we can speak Chinese") def sleep(self):
print("the studies show us, adult people should sleep at least 7 hours everyday") p = Person("Ivy","24","female")
p.talk()
原理分析:创建类的时候会自动在内存里面生成一个类名称空间,当实例化一个对象的时候有会生成另一个名称空间,对象会直接把类下面init里面的属性copy到自己的名称空间里,
然后需要使用类方法的时候,对象会直接找类里面的方法。

实例2:给类里面的方法传参

例子3:写开演唱会
class Singer:
def __init__(self,name,salary,gender,songs = []):
self.name = name
self.salary = salary
self.gendeer = gender
self.songs = songs def song_list(self,songs_lst):
for s in songs_lst:
self.songs.append(s) def sing(self,song):
print(f'{self.name} is singing {song}') def live(self):
for item in self.songs:
print(f'{self.name} is singing {item}') songs_list = ["寓言","阿刁","花房姑娘"]
singer = Singer("Angela","100000","female",songs_list)
singer.sing("淋雨一直走")
singer.live() 例子4 银行存取钱
class Account:
def __init__(self,card,password,money=10):
self.card = card
self.pwd = password
self.money = money def saving(self):
if self.card == "100000" and self.pwd == "123456":
saving_number = int(input("Please input money number that you want to saving: ").strip())
self.money += saving_number
else:
print("card number or password is wrong") def take_money(self):
if self.card == "100000" and self.pwd == "123456":
taking_money = int(input("please input the money number which you plan to take out: "))
if taking_money <= self.money:
print(f"you can take money {taking_money}")
self.money -= taking_money
else:
print('sorry,Insufficient balance')
else:
print("card number or password is wrong") def banlance(self):
print(f'your current balance is {self.money}') p = Account("100000","123456")
p.banlance()
p.saving()
p.take_money()
p.banlance() 例子5 对一组模板的定义
class Msg:
def email(self):
print("send message through email")
def chat(self):
pass
def wechat(self):
print("send message through wechat") def app(self):
print("send message through app") def important(self):
self.email()
self.wechat()
self.app() msg = Msg()
msg.important()
二.封装
属性的封装:把多个变量封装到一个对象中
方法的封装:把多个方法封装到一个对象中
三.继承
子类可以自动拥有父类的功能除了私有的以外
单继承:
class NiuMaoWang:
def fly(self):
print("flying") class HongHaiEr(NiuMaoWang):
pass honghaier = HongHaiEr()
honghaier.fly() 多继承:
class NiuMaoWang:
def fly(self):
print("flying") class TieSan:
def PutOffFire(self):
print("put out fire")
class HongHaiEr(NiuMaoWang,TieSan):
pass honghaier = HongHaiEr()
honghaier.fly()
honghaier.PutOffFire()
ps: 一个子类可以拥有多个父类。如果继承了多个父类,会有优先查找最近的那个一。父类也称为基类和超类,子类也称为派生类(python3 里面的继承都是广度优先,
python2里面默认是深度优先,采用C3算法)
四.多态
同一个对象,多重形态
def duck(duckk):
duckk.bulk() class Monkey:
def __self__(self):
pass def bulk(self):
print("bulking") monkey = Monkey()
monkey.bulk()
duck(monkey) 待补充
五.类的成员
1.变量 分为类变量和实例变量
实例变量:对象.方法 调用。
类变量: 直接定义在类里面,对所有对象开放,特点节约内存,通过类直接调用。(也可以使用实例来调用but不推荐)
2.方法
2.1.实例方法:对象.方法
2.2.类方法:类名.方法
第一个参数要求传过来一个类
类方法上面必须加一个@classmethod
2.3.静态方法:类名.方法 也可以是对象.方法
类方法上面必须加@staticmethod装饰器,相当于在类的名称空间定义了一个普通函数,主要是做分类用。
3.属性
把一个方法装饰成一个函数来使用 在类方法上方加@propeerty,主要使用的场景做某些函数会随着时间的推移而变化,例如:年龄或者分页。
六.类与类之间的关系
1.依赖关系
两个事物之间联系不紧密,我需要你但是你不属于我,类与类之间最松散的一种关系。在执行某个方法的时候把另外一个类的对象传递进来
class Person:
def __init__(self,name,gender):
self.name = name
self.gender = gender def play_game(self,tools): ps:通过传递参数产生联系
tools.wzry() class Phone:
def __init__(self,brand,price):
self.brand = brand
self.price = price def wzry(self):
print(f'{self.brand} is running 王者荣耀') phone = Phone("米6","2300")
person = Person("Ivy","female")
person.play_game(phone)
2.关联关系(我需要你,你也属于我),组合关系,聚合关系
2.1.关联关系: 两种事物必须是互相关联的. 但是在某些特殊情况下是可以更更改和更更换的.
2.2. 聚合关系. 属于关联关系中的⼀一种特例例. 侧重点是xxx和xxx聚合成xxx. 各⾃自有各⾃自的 声明周期. 比如电脑. 电脑⾥里里有CPU, 硬盘, 内存等等. 电脑挂了了. CPU还是好的. 还是 完整的个体
2.3. 组合关系. 属于关联关系中的⼀一种特例例. 写法上差不多. 组合关系比聚合还要紧密. 比 如⼈人的⼤大脑, ⼼心脏, 各个器官. 这些器官组合成⼀一个⼈人. 这时. ⼈人如果挂了了. 其他的东⻄西 也跟着挂了了.
例1:关联一对一
class Boy:
def __init__(self,name,gender,GirlFriend = None):
self.name = name
self.age = gender
self.GirlFriend = GirlFriend def hava_a_dinner(self):
if self.GirlFriend:
print(f'{self.name} hava a dinner with {self.GirlFriend.name}')
else:
print("single dog, you have no right for dinner") class Girl:
def __init__(self,name,gender):
self.name = name
self.gender = gender def makeup(self):
print(f'{self.name} has a big advantege is makeup herself like 20 years old')
girl = Girl("如花","female")
boy = Boy("Jack","male",girl)
boy.hava_a_dinner()
boy.GirlFriend = None
boy.hava_a_dinner() 例2:关联一对多
class Teacher:
def __init__(self,name,student_list = []):
self.name = name
self.student_list = student_list def teach(self):
print(f'{self.name} is teaching')
for student in self.student_list:
student.study() class Student:
def __init__(self,name):
self.name = name def study(self):
print(f'{self.name} is studying') s1 = Student("Ivy")
s2 = Student("Zoe")
s3 = Student("Yvette")
lst = [s1,s2,s3]
t = Teacher("Tony",lst).teach()
s1.study()
3.继承关系,实现关系
七.私有
双下划线开头的是私有的内容
day06 Python class基础篇的更多相关文章
- python+selenium基础篇,切入切出frame
1.首先制作一个html的文件,代码如下 <!DOCTYPE html> <html> <head> <title>Frame_test</tit ...
- [python面向对象]--基础篇
1.#类 #类就是一个模板,模板里可以包含多个函数,函数里实现一些功能 #定义一个类 class bar: def foo(self,agr): print(self,agr) obj = bar() ...
- Python学习——基础篇
1.python的安装 python下载地址:https://www.python.org/downloads/ 安装完成后,运行cmd.exe,输入python 如果出现“p ...
- python正则表达式基础篇
1.正则表达式基础 1.1简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大 ...
- Python学习—基础篇之文件操作
文件操作 文件操作也是编程中需要熟练掌握的技能,尤其是在后台接口编写和数据分析过程中,对各种类型的文件进行操作,获取文件信息或者对信息进行存储是十分重要的.本篇博客中将主要对常见的文本格式文件和Exc ...
- Python+Selenium基础篇之5-第一个完整的自动化测试脚本
前面文章,我们介绍了如何采用XPath表达式去定位网页元素,在掌握了如何抓取或者如何书写精确的XPath表达式后,我们可以开始写自己的第一个真正意义上的webui 自动化测试脚本,就相当于,你在学习P ...
- 第五篇:Python函数基础篇
本篇介绍什么是函数.函数的特性.函数的定义.函数的调用.以及函数的参数.以及关于全局变量和局部变量的使用等等. 一.什么是函数: 函数是最基本的一种代码抽象方式,为了实现某种特定的功能而组织的带名字的 ...
- 十六、python面向对象基础篇
面向对象基础: 在了解面向对象之前,先了解下变成范式: 编程范式是一类典型的编程风格,是一种方法学 编程范式决定了程序员对程序执行的看法 oop中,程序是一系列对象的相互作用 python支持多种编程 ...
- Python ( 学习基础篇 第二部 )
目录 运算符 算数运算符 比较运算符 赋值运算符 位运算符 逻辑运算符 成员运算符 身份运算符 Python 中运算符的优先级 运算符总结基础语法 判断类型 isinstence 代码块 流程控制 w ...
随机推荐
- RDS数据库全量恢复方案
一.全量恢复 恢复最近的快照,将快找之前的数据全量恢复 二.增量恢复 下载对应的binlog日志导入到数据库 三.还没有备份的binlog日志获取方法 首先连接 RDS for MySQL 后查看当前 ...
- Tomcat安装应用部署及配置文件解读
Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选. Tomcat和Nginx,APa ...
- Understanding decimal(p, s) of sqlite3
带固定精度和小数位数的数值数据类型.decimal(p[ ,s]) 和 numeric(p[ ,s]) 固定精度和小数位数. 使用最大精度时,有效值的范围为 - 10^38 +1 到 10^38 - ...
- iOS开发UIkit动力学UIDynamicAnimator一系列动画
UIDynamicAnimator类,通过这个类中的不同行为来实现一些动态特性. UIAttachmentBehavior(吸附),UICollisionBehavior(碰撞),UIGravityB ...
- php进程创建慢导致的502
转自: 作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除地址:http://www.jackxiang.com/post/926 ...
- SLC cache功能
由于TLC需要多次编程,且未全部编程时wordLine处于不稳定状态,所以一般都会划出一部分区域作为SLC cache使用 SLC cache主要功能是,SSD接收到写命令后,先将数据写入SLC ca ...
- MariaDB知识点总结02--日志+备份
一.日志 1.查询日志 记录每一条sql语句,建议不开启,因为如果访问量较大,会占用相当大的资源,影响性能; vim /etc/my.cnf.d/server.cnf general_log = ON ...
- APP安全_Android反编译
反编译 Android的反编译工具:apktool,JEB等. Apk 文件的结构,如下: META-INF:签名文件 res:资源文件,里面的 xml 格式文件在编译过程中由文本格式转化为二进制的 ...
- maven 编译,测试,打包和安装工程
编译工程,使用命令mvn compile 测试工程,使用命令mvn test 测试和编译工程,使用命令mvn test-compile 打包工程,使用命令mvn package,将工程打包成jar\w ...
- Java中简单测试FastDFS的文件上传
pom.xml文件内容如下: <dependencies> <!-- fastdfs --> <dependency> <groupId>org.cso ...