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 相关文章推荐
php使用递归与迭代实现快速排序示例
Jan 23 Python
pycharm 使用心得(二)设置字体大小
Jun 05 Python
python基于queue和threading实现多线程下载实例
Oct 08 Python
python定向爬取淘宝商品价格
Feb 27 Python
python 识别图片中的文字信息方法
May 10 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
Jun 13 Python
Python利用神经网络解决非线性回归问题实例详解
Jul 19 Python
python多线程案例之多任务copy文件完整实例
Oct 29 Python
python求最大公约数和最小公倍数的简单方法
Feb 13 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
Apr 16 Python
Python连接mysql数据库及简单增删改查操作示例代码
Aug 03 Python
python爬虫用request库处理cookie的实例讲解
Feb 20 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
动态生成gif格式的图像要注意?
2006/10/09 PHP
PHP开发入门教程之面向对象
2006/12/05 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
2015/07/29 PHP
php使用curl伪造来源ip和refer的方法示例
2018/05/08 PHP
jQuery Select(单选) 模拟插件 V1.3.62 改进版
2010/07/17 Javascript
基于jquery的大众点评,分类导航实现代码
2011/08/23 Javascript
js 浏览器事件介绍
2012/03/30 Javascript
jQuery常见开发技巧详细整理
2013/01/02 Javascript
js超时调用setTimeout和间歇调用setInterval实例分析
2015/01/28 Javascript
深入浅出理解javaScript原型链
2015/05/09 Javascript
jQuery实现页面评论栏中访客信息自动填写功能的方法
2016/05/23 Javascript
深入理解jQuery 事件处理
2016/06/14 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
HTML5 js实现拖拉上传文件功能
2020/11/20 Javascript
移动端点击态处理的三种实现方式
2017/01/12 Javascript
jquery实现提示语淡入效果
2017/05/05 jQuery
Vue 微信端扫描二维码苹果端却只能保存图片问题(解决方法)
2020/01/19 Javascript
[02:32]【DOTA2亚洲邀请赛】iceice,梦开始的地方
2017/03/13 DOTA
[02:19]DOTA选手解说齐贺岁
2018/02/11 DOTA
简介Django框架中可使用的各类缓存
2015/07/23 Python
Python中条件判断语句的简单使用方法
2015/08/21 Python
基于Python的XSS测试工具XSStrike使用方法
2017/07/29 Python
创建Django项目图文实例详解
2019/06/06 Python
Python过滤掉numpy.array中非nan数据实例
2020/06/08 Python
墨尔本照明批发商店:Mica Lighting
2017/12/28 全球购物
信息技术教学反思
2014/02/12 职场文书
法制宣传教育方案
2014/05/09 职场文书
母亲节演讲稿
2014/05/27 职场文书
祖国在我心中演讲稿200字
2014/08/28 职场文书
员工离职感谢信
2015/01/22 职场文书
2015年小学教师培训工作总结
2015/07/21 职场文书
公司员工管理制度
2015/08/04 职场文书
2015年国庆节寄语
2015/08/17 职场文书
Django实现聊天机器人
2021/05/31 Python
使用feign服务调用添加Header参数
2021/06/23 Java/Android
Python 类,对象,数据分类,函数参数传递详解
2021/09/25 Python