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 yield 小结和实例
Apr 25 Python
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
Oct 13 Python
python使用__slots__让你的代码更加节省内存
Sep 05 Python
python字符串和常用数据结构知识总结
May 21 Python
Django外键(ForeignKey)操作以及related_name的作用详解
Jul 29 Python
Python 异常处理Ⅳ过程图解
Oct 18 Python
OpenCV python sklearn随机超参数搜索的实现
Jan 17 Python
判断Threading.start新线程是否执行完毕的实例
May 02 Python
Python 如何实现数据库表结构同步
Sep 29 Python
如何利用Python 进行边缘检测
Oct 14 Python
Python list去重且保持原顺序不变的方法
Apr 03 Python
python的列表生成式,生成器和generator对象你了解吗
Mar 16 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
dedecms模板标签代码官方参考
2007/03/17 PHP
smarty模板判断数组为空的方法
2015/06/10 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
Smarty模板语法详解
2019/07/20 PHP
javascript Array数组对象的扩展函数代码
2010/05/22 Javascript
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
仅IE6/7/8中innerHTML返回值忽略英文空格的问题
2011/04/07 Javascript
jQuery最佳实践完整篇
2011/08/20 Javascript
用显卡加速,轻松把笔记本打造成取暖器的办法!
2013/04/17 Javascript
面向对象继承实例(a如何继承b问题)(自写)
2013/07/01 Javascript
推荐10 款 SVG 动画的 JavaScript 库
2015/03/24 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
2015/12/26 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
2016/08/09 Javascript
vue跨域解决方法
2017/10/15 Javascript
JavaScript实现单英文金山打字通
2020/07/24 Javascript
使用 Jest 和 Supertest 进行接口端点测试实例详解
2020/04/25 Javascript
[49:27]LGD vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:10:57]Liquid vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python编程对列表中字典元素进行排序的方法详解
2017/05/26 Python
利用python实现简单的邮件发送客户端示例
2017/12/23 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
2018/07/09 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
2018/09/04 Python
Python简易版停车管理系统
2019/08/12 Python
手机使用python操作图片文件(pydroid3)过程详解
2019/09/25 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
2020/08/07 Python
虚拟环境及venv和virtualenv的区别说明
2021/02/05 Python
浅谈html5 响应式布局
2014/12/24 HTML / CSS
计算s=f(f(-1.4))的值
2014/05/06 面试题
体育教师求职信
2014/06/30 职场文书
个人授权委托书范本
2014/09/14 职场文书
幼儿园教师的自我评价范文
2014/09/17 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
教师考核鉴定意见
2015/06/05 职场文书
车辆安全隐患排查制度
2015/08/05 职场文书
关于环保的广播稿
2015/12/17 职场文书
Python docx库删除复制paragraph及行高设置图片插入示例
2022/07/23 Python