一.PYTHON面向对象基础

面向对象侧重于对的人,做对的事

1.类和对象的基本概念

  • 类的介绍
  • 对象的介绍
  • 类和对象的关系

2.类的设计基础

  • 类设计的三要素

3.类使用的基本语法

3.1类的定义和使用基本语法

  • 类的定义
  • 类的使用
  • 使用案例
class Cat:def eat(self):print("小猫爱吃鱼")def drink(self):print("小猫要喝水")# 创建猫对象
tom = Cat()tom.eat()
tom.drink()

3.2在类外部给已经实例的对象添加属性,并通过类内部方法来打印类内部信息。

class Cat:def eat(self):# 哪一个对象调用的方法,self就是哪一个对象的引用print("%s 爱吃鱼" % self.name)def drink(self):print("%s 要喝水" % self.name)# 创建猫对象
tom = Cat()
# 可以使用 .属性名 利用赋值语句就可以了
tom.name = "Tom"tom.eat()
tom.drink()print(tom)# 再创建一个猫对象
lazy_cat = Cat()
lazy_cat.name = "大懒猫"lazy_cat.eat()
lazy_cat.drink()print(lazy_cat)

3.3类初始化方法的介绍和使用

  • 初始化方法的使用案例
class Cat:def __init__(self, new_name):print("这是一个初始化方法")# self.属性名 = 属性的初始值# self.name = "Tom"self.name = new_name #将重要变量动态化,不能固定死def eat(self):print("%s 爱吃鱼" % self.name)# 使用类名()创建对象的时候,会自动调用初始化方法 __init__
tom = Cat("Tom")print(tom.name)lazy_cat = Cat("大懒猫")
lazy_cat.eat()

3.4常用内置方法

  • __ del __ 方法:希望在对象被销毁之前,再执行一些操作
class Cat:def __init__(self, new_name):self.name = new_nameprint("%s 来了" % self.name)def __del__(self):print("%s 我去了" % self.name)# tom 是一个全局变量
tom = Cat("Tom")
print(tom.name)# del 关键字可以删除一个对象
del tomprint("-" * 50)
  • __ str __方法:希望使用print打印输出对象时,输出自定义的文本内容
class Cat:def __init__(self, new_name):self.name = new_nameprint("%s 来了" % self.name)def __str__(self):# 必须返回一个字符串return "我是小猫[%s]" % self.name# tom 是一个全局变量
tom = Cat("Tom")
print(tom)

3.5私有属性与私有方法

类中的私有化设置参考-直通车

class Women:def __init__(self, name):self.name = nameself.__age = 18def __secret(self):# 在对象的方法内部,是可以访问对象的私有属性的print("%s 的年龄是 %d" % (self.name, self.__age))xiaofang = Women("小芳")# 私有属性,在外界不能够被直接访问
# print(xiaofang.__age)
# 私有方法,同样不允许在外界直接访问
# xiaofang.__secret()

3.6 新式类与旧式类(python3.0+ 都是新式类)

二,继承学习(实现代码的重用,降低冗余)

1.单继承(一个父类)

  • 继承具有传递性:孙子会爸爸会的,也会爷爷会的。
  • 使用案例
class Animal:def eat(self):print("吃---")def drink(self):print("喝---")def run(self):print("跑---")def sleep(self):print("睡---")#单继承
class Dog(Animal):def bark(self):print("汪汪叫")# 创建一个对象 - 狗对象
wangcai = Dog()wangcai.eat()
wangcai.drink()
wangcai.run()
wangcai.sleep()
wangcai.bark()

2.方法重写(当父类方法不能满足实际需求时,对父类方法进行修改重写)

  • 当子类方法实现与父类方法实现完全不同时
class Animal:def eat(self):print("吃---")def drink(self):print("喝---")def run(self):print("跑---")def sleep(self):print("睡---")class Dog(Animal):def bark(self):print("汪汪叫")class XiaoTianQuan(Dog):def fly(self):print("我会飞")def bark(self):print("叫得跟神一样...")xtq = XiaoTianQuan()
# 如果子类中,重写了父类的方法
# 在使用子类对象调用方法时,会调用子类中重写的方法
xtq.bark()
  • 当子类方法实现包含着父类的方法实现时(对父类方法进行拓展)
class Animal:def eat(self):print("吃---")def drink(self):print("喝---")def run(self):print("跑---")def sleep(self):print("睡---")class Dog(Animal):def bark(self):print("汪汪叫")class XiaoTianQuan(Dog):def fly(self):print("我会飞")def bark(self):# 1. 针对子类特有的需求,编写代码print("神一样的叫唤...")# 2. 使用 super(). 调用原本在父类中封装的方法super().bark()# 3. 增加其他子类的代码print("$%^*%^$%^#%$%")xtq = XiaoTianQuan()# 如果子类中,重写了父类的方法
# 在使用子类对象调用方法时,会调用子类中重写的方法
xtq.bark()

3.类继承中的私有属性和方法特性

class A:def __init__(self):self.num1 = 100self.__num2 = 200def __test(self):print("私有方法 %d %d" % (self.num1, self.__num2))def test(self):print("父类的公有方法 %d" % self.__num2)self.__test()class B(A):def demo(self):# 1. 在子类的对象方法中,不能访问父类的私有属性# print("访问父类的私有属性 %d" % self.__num2)# 2. 在子类的对象方法中,不能调用父类的私有方法# self.__test()# 3. 访问父类的公有属性print("子类方法 %d调用父类共有属性" % self.num1)# 4. 调用父类的公有方法self.test()# 创建一个子类对象
b = B()b.demo()# 在外界访问父类的公有属性/调用公有方法
# print(b.num1)
# b.test()# 在外界不能直接访问对象的私有属性/调用私有方法
# print(b.__num2)
# b.__test()

4.多继承(一个子类多个父类)

  • 使用语法
class A:def test(self):print("test 方法")class B:def demo(self):print("demo 方法")class C(A, B):"""多继承可以让子类对象,同时具有多个父类的属性和方法"""pass# 创建子类对象
c = C()c.test()
c.demo()
  • 如果多个父类中存在同名的属性和方法,根据继承顺序执行先继承的父类方法。
class A:def test(self):print("A --- test 方法")def demo(self):print("A --- demo 方法")class B:def test(self):print("B --- test 方法")def demo(self):print("B --- demo 方法")class C(B, A):#同名则执行B父类中的方法"""多继承可以让子类对象,同时具有多个父类的属性和方法"""pass# 创建子类对象
c = C()c.test()
c.demo()# 确定C类对象调用方法的顺序
#(<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)
print(C.__mro__)#输出执行顺序,如果有执行的方法了就不往后查找了。左-->右查找

三,多态学习(增加代码的灵活度,如:同名不同参)

  • 传入不同的狗对象执行同一个方法,会产生不同的结果
class Dog(object):def __init__(self, name):self.name = namedef game(self):print("%s 蹦蹦跳跳的玩耍..." % self.name)class XiaoTianDog(Dog):def game(self):print("%s 飞到天上去玩耍..." % self.name)class Person(object):def __init__(self, name):self.name = namedef game_with_dog(self, dog):print("%s 和 %s 快乐的玩耍..." % (self.name, dog.name))# 让狗玩耍dog.game()# 1. 创建一个狗对象
# wangcai = Dog("旺财")
wangcai = XiaoTianDog("飞天旺财")# 2. 创建一个小明对象
xiaoming = Person("小明")# 3. 让小明调用和狗玩的方法
xiaoming.game_with_dog(wangcai)

四,类属性,类方法,静态方法

1.类属性(往往用于计数等宏观的作用)

  • 访问类属性一定要用 类名.属性名 来使用不要对象名.属性名来使用,会出问题。!
class Tool(object):# 使用赋值语句定义类属性,记录所有工具对象的数量count = 0def __init__(self, name):self.name = name# 让类属性的值+1Tool.count += 1# 1. 创建工具对象
tool1 = Tool("斧头")
tool2 = Tool("榔头")
tool3 = Tool("水桶")# 2. 输出工具对象的总数
print(Tool.count)#用类名.属性名来使用!!!!

2.类方法(不用实例化后执行的方法,直接使用类名调用即可)

class Tool(object):# 使用赋值语句定义类属性,记录所有工具对象的数量count = 0@classmethoddef show_tool_count(cls):print("工具对象的数量 %d" % cls.count)def __init__(self, name):self.name = name# 让类属性的值+1Tool.count += 1# 创建工具对象
tool1 = Tool("斧头")
tool2 = Tool("榔头")# 调用类方法
Tool.show_tool_count()

3.静态方法(仅仅作为封装在某类里的一个工具函数)

class Dog(object):@staticmethoddef run():# 不访问实例属性/类属性print("小狗要跑...")# 通过类名.调用静态方法 - 不需要创建对象
Dog.run()

4.实例方法,类方法,静态方法综合案例

class Game(object):# 历史最高分top_score = 0def __init__(self, player_name):self.player_name = player_name@staticmethoddef show_help():print("帮助信息:让僵尸进入大门")@classmethoddef show_top_score(cls):print("历史记录 %d" % cls.top_score)def start_game(self):print("%s 开始游戏啦..." % self.player_name)# 1. 查看游戏的帮助信息(静态方法--什么信息都不需要)
Game.show_help()# 2. 查看历史最高分(类方法--仅需访问类属性)
Game.show_top_score()# 3. 创建游戏对象
game = Game("小明")game.start_game()#(实例方法,实例化后才能执行的方法)

五,单例模式(唯一的实例,如:回收站、打印机)

1.__ new __方法(作用:为对象分配空间,可以在分配时做一些操作)

class MusicPlayer(object):#给对象分配空间时执行def __new__(cls, *args, **kwargs):# 1. 创建对象时,new方法会被自动调用print("创建对象,分配空间")# 2. 为对象分配空间instance = super().__new__(cls)# 3. 返回对象的引用return instance#实例化时执行def __init__(self):print("播放器初始化")# 创建播放器对象
player = MusicPlayer()print(player)

2.单例类的创建

  • 多次调用的结果是同一个,返回结果只有一个实例
class MusicPlayer(object):# 记录第一个被创建对象的引用instance = Nonedef __new__(cls, *args, **kwargs):# 1. 判断类属性是否是空对象if cls.instance is None:# 2. 调用父类的方法,为第一个对象分配空间cls.instance = super().__new__(cls)# 3. 返回类属性保存的对象引用return cls.instance# 创建多个对象
player1 = MusicPlayer()
print(player1)player2 = MusicPlayer()
print(player2)#<__main__.MusicPlayer object at 0x000002D83FED3D08>
#<__main__.MusicPlayer object at 0x000002D83FED3D08>

3.拓展:单例模式下初始化方法只执行一次的单例类(比如多次进入一个餐厅,只需要登记一次)

class MusicPlayer(object):# 记录第一个被创建对象的引用instance = None# 记录是否执行过初始化动作init_flag = Falsedef __new__(cls, *args, **kwargs):# 1. 判断类属性是否是空对象if cls.instance is None:# 2. 调用父类的方法,为第一个对象分配空间cls.instance = super().__new__(cls)# 3. 返回类属性保存的对象引用return cls.instancedef __init__(self):# 1. 判断是否执行过初始化动作if MusicPlayer.init_flag:return# 2. 如果没有执行过,在执行初始化动作print("初始化播放器")# 3. 修改类属性的标记MusicPlayer.init_flag = True# 创建多个对象
player1 = MusicPlayer()
print(player1)player2 = MusicPlayer()
print(player2)

PYTHON面向对象(类)相关推荐

  1. python面向对象类属性_python面向对象之类属性和类方法案例分析

    本文实例讲述了python面向对象之类属性和类方法.分享给大家供大家参考,具体如下: 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 -- 实例 使用面相对象开发, ...

  2. Python面向对象---类的基本使用

    1.面向对象 类(class):是一种用来描述具有相同属性和方法的对象的集合. 类变量:类变量在整个实例化的对象中是公用的.一般定义在类中且在函数体之外. 方法:类中的函数 数据成员:类变量或者实例变 ...

  3. python面向对象类的成员_Python面向对象中类的成员

    Python面向对象中类的成员总共有三种,分别是字段.方法和属性 Python Version: 3.5+ 字段 普通字段1 2 3 4 5 6 7 8class A: def __init__(se ...

  4. python面向对象类创建人物类包含姓名、职业_Python面向对象思想与应用入门教程【类与对象】...

    本文实例讲述了Python面向对象思想与应用.分享给大家供大家参考,具体如下: 面向对象思想 1.面向对象的设计思想 面向对象是基于万物皆对象这个哲学观点. 2.面向对象和面向过程的区别 面向过程 在 ...

  5. python面向对象 —— 类和对象(一)

    文章目录 一.面向对象的概念 二.类和对象 (一)类 (二)对象 (三)从对象抽象出类 三.创建类 (一)类属性 类变量和实例变量 (二)类的方法 参数 :self 的理解 __init__(初始化方 ...

  6. python面向对象类创建人物类包含姓名、职业_python面向对象类

    面向对象变成介绍 面向过程编程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西.主要应用在一旦完成很少修改的地方,如linux ...

  7. python面向对象类_python:面向对象(类)

    #!usr/bin/env python # -*- coding:utf-8 -*- __author__ = "Samson" ###类变量与实例变量 class Role: ...

  8. python面向对象类_python面向对象-类和对象

    一. 类的定义 class类名(): 代码 #定义类 classWasher():defwash(self):print("洗衣服") 注意:类名要满足标识符命名规则,同时遵循大驼 ...

  9. Python面向对象(类的成员之属性)

    day24 类的成员之属性 1 class Foo(): 2 def bar(self): 3 print("bar") 4 5 @property 6 def per(self) ...

  10. python 面向对象 类的内置方法

    判断是不是类cls的对象 class A:passa = A() print(isinstance(a,A)) 判断类sub是不是super的子类 class A:passclass B(A):pas ...

最新文章

  1. java content()_理解content(一)
  2. Wannafly交流赛1 B 硬币[数学思维/贪心]
  3. xml处理相关文章收藏
  4. 我机器人里面的匡威照片_威尔史密斯在《我,机器人》里面穿的是匡威的那款鞋啊...
  5. uuid生成_php如何生成 uuid(总结)
  6. 语言ppt课件猜拳_八年级语文上册第22课 孟子三章讲解及课件下载
  7. 08TensorFlow2.0基础--8.1TensorFlow2.0特性
  8. ImageNet夺冠后转战NLP!卡内基梅隆华人博士提出谷歌搜索引擎核心技术
  9. oracle 中的角色
  10. AWK学习笔记八:AWK内置函数
  11. oracle11g 卸载步骤
  12. KM算法实现带权匹配C#版本和C++两个版本实现O^3
  13. 女神节福利:友萌君送你~健身踏青装备
  14. php 获取提成的公式,拿提成的工资怎么算的有公式吗_工资提成计算公式
  15. Python写自动化之图标锁定到任务栏或删除图标
  16. 头像裁剪框html css,GitHub - saintic/layui-cropper-avatar: Layui头像裁剪组件
  17. 《笨方法学 Python 3》35.分支和函数
  18. 普希金-假如生活欺骗了你
  19. Go爬虫colly官方示例六【xkcd_store】- 抓取xkcd商店商品列表
  20. js 格式化 java时间格式化_JavaScript前台页面使用jsjava对后台传过来的日期进行格式化...

热门文章

  1. 求java特色队名_有特色的队名和口号运动会
  2. 尚硅谷第五天课0722班 java-面向对象学习的三条主线-面向对象的思想概述- 类的元素- java类及类的成员-类的成员之方 法
  3. 您正在搜索的页面可能已经删除、更名或暂时不可用。
  4. 《工程地质及土力学》
  5. Linux开启SSH远程登陆root账户
  6. C 语言 crc16校验算法,CRC16的标准校验算法及C语言实现(附代码)
  7. 风电机组状态监测系统(CMS)
  8. linux中umask的原理和作用,Linux 的umask详解
  9. 第八十七章 SQL命令 VALUES
  10. sysinfo(系统调用)