Python3.5面向对象与继承图文实例详解
作者:loveliuzz 发布时间:2021-05-14 15:48:42
本文实例讲述了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: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)面向对象的思路
(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、属性
示例属性、类属性代码:
#!/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
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): #继承
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
子类中重写父类的方法:重写体现多态
#!/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操作去完成调用。
#!/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)定义
(2)示例代码——人开车
希望本文所述对大家Python程序设计有所帮助。
来源:https://blog.csdn.net/loveliuzz/article/details/78151990


猜你喜欢
- 前言vim是个伟大的编辑器,不仅在于她特立独行的编辑方式,还在于她强大的扩展能力。然而,vim自身用于写插件的语言vimL功能有很大的局限性
- 在进制学习时候,细心的小伙伴不免都发现unicher函数的存在,没错能够经常看到的,也就是关于进制的转化,那肯定有小伙伴要开心起来了,因为进
- 直接上代码:<?php$array_values['host'] = "host";$array_
- 如下所示:将不想索引的文件夹设置为Excluded Folders 及设置检索不包括的文件File - Settings - -> P
- 一、前言1.1.环境python版本:3.6Django版本:1.11.61.2.预览效果最终搭建的blog的样子,基本上满足需求了。框架搭
- 这几天用到了raw socket,用python写了些demo程序,这里记录下。首先我们看一个简单的sniffer程序:#! /usr/bi
- 增大 SGA 已经缓冲看来对于性能的提升并不显著,加载时间只提升了 1.73%。下面我们增加 SGA 重做日志的大小: DB3: Log B
- 正在看的ORACLE教程是:Oracle数据库集复制方法浅议。前言 日益增长的分布式应用需求要求实现更好分布式的软件环境,不断推动着分布式技
- 多态问起面向对象的三大特性,几乎每个人都能对答如流:封装、继承、多态。今天我们就要来说一说 Python 中的多态。所谓多态:就是指一个类实
- 本文实例讲述了Python简单生成随机数的方法。分享给大家供大家参考,具体如下:主要知识点:随机整数:random.randint(a,b)
- 有时候我们用的一些pdf资料是没有目录的,这样找寻我们想到的东西比较麻烦。本篇文章就为大家带来python来生成pdf目录书签的方法。首先,
- 但GAE、Django并没有直接将pyExcelerator导出为Excel的方法。我的思路是先用把数据导入到Workbook和Worksh
- 本文实例讲述了Python下载指定页面上图片的方法。分享给大家供大家参考,具体如下:#!/usr/bin/python #coding:ut
- 在《永远强大的函数》那一讲中,老齐我已经向看官们简述了一下变量,之后我们就一直在使用变量,每次使用变量,都要有一个操作,就是赋值。本讲再次提
- 在网上搜索Linux下安装MySQL的方法时,出现了很多的方法,但是很多的方法很复杂,而且还不一定成功,试了很久终于试验出一种简单的方法,下
- 前2天群里发了张git历史图,如下:根据提交历史,可以看出图中所有分支合并都采用merge的方式,具体merge是怎么操作的,可以阅读下边文
- vue3 表单验证前言表单验证可以有效的过滤不合格的数据,减少服务器的开销,并提升用户的使用体验。今天我们使用 vue3 来做一个表单验证的
- 最近遇到这样一个问题,在页面上要显示一段自定义的文本,文本如果较长的话需要换行显示。在HTML中可以通过<br/>标签换行,也可
- 当浏览网页时,总有那么一类网站华丽而富有趣味性。在浏览信息的同时,足够让我们眼前一亮。它们在充分融入动画、视频、游戏、甚至是与众不同的交互操
- 在本节中将会给Movie模型添加验证逻辑。并且确保这些验证规则在用户创建或编辑电影时被执行。保持事情 DRYASP.NET MVC 的核心设