Python3.5面向对象与继承图文实例详解


Posted in Python onApril 24, 2019

本文实例讲述了Python3.5面向对象与继承。分享给大家供大家参考,具体如下:

1、编程的方式

Python3.5面向对象与继承图文实例详解

2、面向对象的基本概念

Python3.5面向对象与继承图文实例详解

Python3.5面向对象与继承图文实例详解

Python3.5面向对象与继承图文实例详解

3、类的基本概念

Python3.5面向对象与继承图文实例详解

Python3.5面向对象与继承图文实例详解

Python3.5面向对象与继承图文实例详解

4、类的定义与调用——简单代码举例

注:建议类名的开头字母用大写,在Python中,类内的函数称作方法,类外的函数还是称作函数。

Python3.5面向对象与继承图文实例详解

Python3.5面向对象与继承图文实例详解

Python3.5面向对象与继承图文实例详解

Python3.5面向对象与继承图文实例详解

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

#类
class Person:
  i = 10   #属性(变量)
  def eat(self):   #方法(函数)
    print("eating...")
  pass

#类的调用
a = Person()
a.eat()

运行结果:

eating...

class Person():
  #对象属性 构造方法 在实例化对象时会自动调用
  # 实例化的对象就具有name和age两个属性
  #self是指当前的对象 self不是关键字可以被代替,但是习惯使用self指代当前对象
  def __init__(self,name,age):
    # 通过构造方法声明了两个对象属性
    #对象.name属性 = name参数
    self.name = name
    self.age = age

  #声明一个类方法
  def speak(self):
    print("Hello,my name is %s,and I'm %d years old" %(self.name,self.age))

#创建实例对象   会触发构造方法
people01 = Person("Jack",18)    #通过Person类实例化出一个people对象
print(people01)   #打印Person对象在内存中的地址

print(people01.name,people01.age)    #打印对象的属性

#给对象添加属性
people01.sex = "F"
print(people01.sex)

#类方法的调用
people01.speak()

运行结果:

<__main__.Person object at 0x0059C5B0>
Jack 18
F
Hello,my name is Jack,and I'm 18 years old

5、类的方法

Python3.5面向对象与继承图文实例详解

Python3.5面向对象与继承图文实例详解

示例代码:

#方法——静态方法
class S():
  #实例(对象)属性
  def __init__(self,name,age):     #self一般指实例对象
    self.name = name
    self.age = age

  @staticmethod    #用staticmethod装饰器修饰 表示test2为静态方法
  def test2():    #不能传入self 对象的引用
    print("test2...")

s1 = S("Joe",18)
s1.test2()   #通过实例调用静态方法
S.test2()    #通过类名调用静态方法


#方法——类方法
class C():
  #类属性
  country = "China"

  #实例(对象)属性
  def __init__(self,name,age):
    self.name = name
    self.age = age

  @classmethod    #用classmethod装饰器修饰 表示test3为类方法
  def test3(cls):   #cls指的是类
    print("test3...",cls.country)    #类方法调用类属性


c1 = C("Jack",18)
c1.test3()   #通过实例调用类方法
C.test3()    #通过类名调用类方法

运行结果:

test1...
test2...
test2...
test3... China
test3... China

Python3.5面向对象与继承图文实例详解

(1)构造方法:构造方法不能重载(被覆盖)

在Python中内置,每一个类都有一个默认的不带参数的构造方法,不需要人为的单独调用,在调用类的同时就运行了构造方法。

构造方法的作用:初始化数据、创建对象(构造方法的调用)

Python3.5面向对象与继承图文实例详解

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

class Person:
  def __init__(self):
    print("构造方法")
  pass

Person()  #类的调用--创建对象

运行结果

构造方法

带参数的构造方法:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

class Person:
  # def __init__(self):
  #   print("构造方法")
  def __init__(self,x):
    print("带参数的构造方法:",x)

  def add(self,x,y):
    print(x+y)

  pass

zs = Person("hello")  #类的调用--创建对象
zs.add(1,2)

 运行结果:

带参数的构造方法: hello
3

(2)面向对象的思路

Python3.5面向对象与继承图文实例详解

(3)类方法

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

#类方法
class Person:
  def eat(self):   #类方法
    print("eating...")
  pass

a = Person()    #类方法调用
a.eat()

运行结果:

eating...

(4)私有方法

只允许在类的内部使用,专门为类服务的。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

class Person:
  def eat(self): # 类方法
    print("eating...")
    self.__sleep() # 调用私有方法

  def __sleep(self):   #私有方法--类的外部不能使用
    print("sleeping...")

pass

b = Person()
b.eat()

运行结果:

eating...
sleeping...

6、属性

Python3.5面向对象与继承图文实例详解

Python3.5面向对象与继承图文实例详解

Python3.5面向对象与继承图文实例详解

示例属性、类属性代码:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

#属性

class a():
  def __init__(self,name,age):
    self.name = name    #实例属性
    self.age = age

  #类内部使用实例属性 self.实例属性名
  def get(self):
    print(self.name)

a1 = a("Jack",18)

#类内部使用实例属性 self.实例属性名
a1.get()

#类外部使用实例属性 对象名.实例属性名
print(a1.name)

#类属性  在__init__()方法外声明
#类内部使用 类名.属性名 调用
#类外部使用通过 类名.属性名 或者 对象名.属性名 方式调用

class b():
  name = "Janne"   #类属性

  #类内部使用类属性——类名.属性名
  def get(self):
    print(b.name)

#类外部使用类属性 通过 类名.属性名
print(b.name)

#类外部使用类属性 通过 对象名.属性名
b1 = b()
print(b1.name)

#类内部使用类属性——类名.属性名
b1.get()

运行结果:

Jack
Jack
Janne
Janne
Janne

(1)类属性/类变量:在类的外部可以调用

(2)私有变量/私有属性:只能在类的内部,通过self使用

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

#属性/变量
class Person:
  i = 10     #类属性/类变量
  __j = 20    #私有属性/私有变量

  def eat(self): # 类方法
    print("eating...")
    print(self.__j) # 调用私有变量

pass

b = Person()
print(b.i)     #通过引用调用(建议)
print(Person.i)   #可通过类名调用
b.eat()

运行结果:

10
10
eating...
20

Python3.5面向对象与继承图文实例详解

class GirlFriend():
  #声明对象属性 通过构造方法
  def __init__(self,name,age,phone,pwd):
    #给对象的属性(变量名)前面加上 __ 成为了私有的属性
    self.__name = name
    self.__age = age
    self.__phone = phone
    self.__pwd = pwd

  #通过预留的接口 对私有属性名进行访问或修改
  def getInfo(self,pwd):
    if pwd == "1234":
      print("My girlfriend is %s,and she's %d years old,Her telephone number is %d"%(self.__name,self.__age,self.__phone))
    else:
      print("you failed...")

  def setName(self,name):
    self.__name = name   #类内修改私有属性

gf = GirlFriend("Janne",18,13511112222,"1234")
gf.setName("Malianna")
gf.getInfo("1234")

运行结果:

My girlfriend is Malianna,and she's 18 years old,Her telephone number is 13511112222

Python3.5面向对象与继承图文实例详解

(3)特殊的类属性

Python3.5面向对象与继承图文实例详解

7、继承

Python中支持多继承,作用:复用,不建议使用多继承(类对象爆炸)、

Python3.5面向对象与继承图文实例详解

继承示例代码:

#继承
#父类
class Animal():
  def __init__(self,name,food,drinks):
    self.name = name
    self.food = food
    self.drinks = drinks

  def eat(self):
    print("%s 爱吃 %s" %(self.name,self.food))

  def drink(self):
    print("%s 爱喝 %s" %(self.name,self.drinks))


#子类
class Dog(Animal):

  def sound(self):
    print("wonf wonf...")

class Cat(Animal):

  def sound(self):
    print("miao miao...")

dogs = Dog("哮天犬","骨头","雪碧")
dogs.eat()
dogs.drink()
dogs.sound()

print("========================")
cats = Cat("波斯猫","鱼","可乐")
cats.eat()
cats.drink()
cats.sound()

运行结果:

哮天犬 爱吃 骨头
哮天犬 爱喝 雪碧
wonf wonf...
========================
波斯猫 爱吃 鱼
波斯猫 爱喝 可乐
miao miao...

示例一:

多继承

Python3.5面向对象与继承图文实例详解

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

#多继承

class Run3000:
  def run(self):
    print("run 3000")

class Jump3:
  def jump(self):
    print("jump 3")

class Sport(Run3000,Jump3):   #继承
  pass

sport = Sport()
sport.run()
sport.jump()

运行结果:

run 3000
jump 3

示例二:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

class Father:
  def __init__(self):
    print("father 构造")
  def teach(self):
    print("father teaching")

class Child(Father):
  pass

zs = Child()    #子类继承与父类,创建子类前先创建父类
zs.teach()

运行结果:

father 构造
father teaching

子类中重写父类的方法:重写体现多态

Python3.5面向对象与继承图文实例详解

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

class Father:
  def __init__(self):
    print("father 构造")
  def teach(self):
    print("father teaching")

class Child(Father):
  def teach(self):    #方法重写
    print("child teaching")

zs = Child()    #子类继承与父类,创建子类前先创建父类
zs.teach()

运行结果:

father 构造
child teaching

新式类:

如果父类的构造方法带参数,则需要子类通过super操作去完成调用。

Python3.5面向对象与继承图文实例详解

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

#新式类
class Father(object):
  def __init__(self,i):
    print("father 构造"+ i)
  def teach(self):
    print("father teaching")

class Child(Father):
  def __init__(self):
    super(Child,self).__init__("hello")
  def teach(self):    #方法重写
    print("child teaching")

zs = Child()    #子类继承与父类,创建子类前先创建父类
zs.teach()

#运行结果:
father 构造hello
child teaching

运行结果:

father 构造hello
child teaching

多继承又不完全,父类都有构造方法时,当子类多继承时,只有一个父类的构造方法被调用。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

class Run3000:
  def __init__(self):
    print("run 3000 构造方法")
  def run(self):
    print("run 3000")

class Jump3:
  def __init__(self):
    print("jump 3 构造方法")
  def jump(self):
    print("jump 3")

class Sport(Run3000,Jump3):   #继承
  pass

sport = Sport()
sport.run()
sport.jump()

运行结果:

run 3000 构造方法
run 3000
jump 3

8、面向对象编程

(1)定义

Python3.5面向对象与继承图文实例详解

(2)示例代码——人开车

Python3.5面向对象与继承图文实例详解

Python3.5面向对象与继承图文实例详解

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python logging重复记录日志问题的解决方法
Jul 12 Python
Python使用装饰器模拟用户登陆验证功能示例
Aug 24 Python
关于Pycharm无法debug问题的总结
Jan 19 Python
python爬虫爬取微博评论案例详解
Mar 27 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
Jul 23 Python
python实现猜拳小游戏
Apr 05 Python
布隆过滤器的概述及Python实现方法
Dec 08 Python
Python 读取WAV音频文件 画频谱的实例
Mar 14 Python
完美解决Django2.0中models下的ForeignKey()问题
May 19 Python
python实现简单贪吃蛇游戏
Sep 29 Python
pytorch 移动端部署之helloworld的使用
Oct 30 Python
python中的插入排序的简单用法
Jan 19 Python
Python3.5基础之NumPy模块的使用图文与实例详解
Apr 24 #Python
基于python的ini配置文件操作工具类
Apr 24 #Python
python实现简单日期工具类
Apr 24 #Python
NumPy 基本切片和索引的具体使用方法
Apr 24 #Python
Python使用dict.fromkeys()快速生成一个字典示例
Apr 24 #Python
python3中property使用方法详解
Apr 23 #Python
详解爬虫被封的问题
Apr 23 #Python
You might like
php 向访客和爬虫显示不同的内容
2009/11/09 PHP
YII框架模块化处理操作示例
2019/04/26 PHP
精解window.setTimeout()&amp;window.setInterval()使用方式与参数传递问题!
2007/11/23 Javascript
Iframe 自适应高度并实时监控高度变化的js代码
2009/10/30 Javascript
JQuery与iframe交互实现代码
2009/12/24 Javascript
jQuery UI AutoComplete 自动完成使用小记
2010/08/21 Javascript
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
JavaScript中json使用自己总结
2013/08/13 Javascript
对比分析json及XML
2014/11/28 Javascript
JavaScript定时显示广告代码分享
2015/03/02 Javascript
jQuery中animate动画第二次点击事件没反应
2015/05/07 Javascript
jquery简单实现带渐显效果的选项卡菜单代码
2015/09/01 Javascript
js选择器全面解析
2016/06/27 Javascript
JavaScript装饰器函数(Decorator)实例详解
2017/03/30 Javascript
jQuery实现键盘回车搜索功能
2017/07/25 jQuery
JavaScript 自定义事件之我见
2017/09/25 Javascript
JS获取url参数,JS发送json格式的POST请求方法
2018/03/29 Javascript
Vue 处理表单input单行文本框的实例代码
2019/05/09 Javascript
centos系统升级python 2.7.3
2014/07/03 Python
windows上安装Anaconda和python的教程详解
2017/03/28 Python
解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题
2019/01/15 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
2020/04/07 Python
python实现处理mysql结果输出方式
2020/04/09 Python
python使用建议与技巧分享(一)
2020/08/17 Python
Python之Sklearn使用入门教程
2021/02/19 Python
html5使用Canvas绘图的使用方法
2017/11/21 HTML / CSS
Javascript 高级手势使用介绍
2013/04/21 HTML / CSS
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
美国网上订购鲜花:FTD
2016/09/23 全球购物
出纳岗位职责范本
2013/12/01 职场文书
禁毒宣传活动总结
2014/08/26 职场文书
2014年局领导班子自身建设情况汇报
2014/11/21 职场文书
2015年药店工作总结
2015/04/20 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书
八月一日观后感
2015/06/10 职场文书
Nginx防盗链与服务优化配置的全过程
2022/01/18 Servers