侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

Python  /  管理员 发布于 7年前   170

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

1、编程的方式


2、面向对象的基本概念




3、类的基本概念




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

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





#!/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、类的方法



示例代码:

#方法――静态方法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


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

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

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


#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:ZhengzhengLiuclass Person:  def __init__(self):    print("构造方法")  passPerson()  #类的调用--创建对象

运行结果

构造方法

带参数的构造方法:

#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:ZhengzhengLiuclass Person:  # def __init__(self):  #   print("构造方法")  def __init__(self,x):    print("带参数的构造方法:",x)  def add(self,x,y):    print(x+y)  passzs = Person("hello")  #类的调用--创建对象zs.add(1,2)

 运行结果:

带参数的构造方法: hello
3

(2)面向对象的思路

(3)类方法

#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:ZhengzhengLiu#类方法class Person:  def eat(self):   #类方法    print("eating...")  passa = Person()    #类方法调用a.eat()

运行结果:

eating...

(4)私有方法

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

#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:ZhengzhengLiuclass Person:  def eat(self): # 类方法    print("eating...")    self.__sleep() # 调用私有方法  def __sleep(self):   #私有方法--类的外部不能使用    print("sleeping...")passb = Person()b.eat()

运行结果:

eating...
sleeping...

6、属性




示例属性、类属性代码:

#!/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) # 调用私有变量passb = Person()print(b.i)     #通过引用调用(建议)print(Person.i)   #可通过类名调用b.eat()

运行结果:

10
10
eating...
20


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


(3)特殊的类属性


7、继承

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


继承示例代码:

#继承#父类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...

示例一:

多继承


#!/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):   #继承  passsport = Sport()sport.run()sport.jump()

运行结果:

run 3000
jump 3

示例二:

#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:ZhengzhengLiuclass Father:  def __init__(self):    print("father 构造")  def teach(self):    print("father teaching")class Child(Father):  passzs = Child()    #子类继承与父类,创建子类前先创建父类zs.teach()

运行结果:

father 构造
father teaching

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


#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:ZhengzhengLiuclass 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操作去完成调用。


#!/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 构造hellochild teaching

运行结果:

father 构造hello
child teaching

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

#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:ZhengzhengLiuclass 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):   #继承  passsport = Sport()sport.run()sport.jump()

运行结果:

run 3000 构造方法
run 3000
jump 3

8、面向对象编程

(1)定义

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



更多关于Python相关内容感兴趣的读者可查看本站专题:《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》

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


  • 上一条:
    Python3.5面向对象编程图文与实例详解
    下一条:
    Python3.5基础之NumPy模块的使用图文与实例详解
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客