面向对象:减少重复代码,提高效率,比函数式编程更高效

类的创建:

实例属性又称:成员变量,成员属性(或者字段)

面向对象的三大特性:

一、封装

把客观事物封装为抽象的类,并对外只暴露一个可用接口

使用构造方法将内容封装到对象中,可通过对象直接或者通过self间接获取被封装的内容

# 创建类
class Foo(object):
def __init__(self, name, age): # 构造方法,根据创建的对象自动执行
self.name = name
self.age = age # 类中的方法A
def A(self):
Foo.name = 'yeeh'
print('hello!', self.name)
print('hello!', Foo.name) # 类中的方法B
def B(self):
print('word!',self.age) obj = Foo('Vera', 18)
obj.age = 12
obj.A()
obj.B()

hello! Vera
hello! yeeh
word! 12

result

二、继承

子类拥有父类的全部方法,也可以对父类方法进行重写,并且可以定义自身的方法(一般到特殊,父类定义一些公共的方法,子类可定义自身特殊的方法)

  • 注:Python中一个子类可以继承多个父类

对于实例属性要进行 :先重写,再继承

# 父类
class People(object):
number = 0 def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
self.drink() # 因为继承,所以调用的时候,都会打印drink ()里的东西 def eat(self):
print('都可以吃东西!') def drink(self):
People.number += 1
print('[%s].[%s] 的年龄是[%s]' % (People.number, self.name, self.age)) # 子类1
class good_person(People):
def __init__(self, name, age, sex, goodness): # 先重写
super(good_person, self).__init__(name, age, sex) # 再继承
self.goodness = goodness def good_ness(self):
print('善良的[%s]做好事' % self.name) # 子类2
class bad_person(People):
def __init__(self, name, age, sex, sourness):
super(bad_person, self).__init__(name, age, sex)
self.sourness = sourness def bad_ness(self):
print('坏人[%s]做坏事!' % self.name) g1 = good_person('花花', 23, '女', '做好事') # 实例化后因为父类的继承,所以直接会打印drink()
g1.good_ness()
b1 = bad_person('李刚', 33, '男', '做了坏事')
b1.bad_ness()
b1.eat() # 继承会继承父类的所有方法

继承

[1].[花花] 的年龄是[23]
善良的[花花]做好事
[2].[李刚] 的年龄是[33]
坏人[李刚]做坏事!
都可以吃东西!

result

注:

新式类 继承的写法:super(bad_person,self).__init__(name,age,sex)  # 利用关键字super

旧式(经典)类 继承的写法:People.__init__(self,name,age,sex)

有关super()继承:https://www.cnblogs.com/testview/p/4651198.html?utm_source=tuicool&utm_medium=referral

多继承:

  • 在3.0里及以后多继承的经典类和新式类都是采用的广度优先原则
  • 在3.0以下的版本,经典类和新式类就有深度和广度的区分

经典类:class A: 深度优先:继承了上一级里没有这个方法就直接到上一级的上一级去寻找,找到始祖没有找到,再从继承的上一级寻找再到它的始祖

新式类:class A(object): 广度优先  :继承的上一级,从左到右依次寻找继承的类里有没有那个方法,如果没有才再寻找上一级的上一级所继承的

class A(object):
def f1(self):
print('我是 A') class B(A):
def f2(self):
print('我是 B') class C(A):
def f3(self):
print('我是 C') class D(B, C):
def f4(self):
print('我是 D') d = D()
d.f1() # D->B->C->A
d.f2() # D->B
d.f3() # D->B->C
d.f4() # D

新式类多继承

class A:
def f1(self):
print('我是 A') class B(A):
def f2(self):
print('我是 B') class C(A):
def f3(self):
print('我是 C') class D(B, C):
def f4(self):
print('我是 D') d = D()
d.f1() # D->B->A
d.f2() # D->B
d.f3() # D->B->A->C
d.f4() # D

经典类多继承

我是 A
我是 B
我是 C
我是 D

result

三、多态

多态:当子类和父类都存在相同的方法时,子类的 方法 覆盖了父类的方法,在代码运行时,会调用子类的方法(一种调用方式,拥有不同的执行效果),把接口进行统一(外部调用,内部可以直接转换到相应方法下)

class Animal(object):
def func(self):
print('这是Animal。。') class dog(Animal):
def func(self):
print('这是dog。。') class pig(Animal):
def func(self):
print('这是pig。。') def run(self):
print('这是pig中的run....') def print_func(animal):
animal.func() A = Animal()
d = dog()
p = pig() print_func(Animal()) # 对外只暴露一个接口,但是可以直接打印多个不同的东西
print_func(dog())
print_func(pig())

多态

这是Animal。。
这是dog。。
这是pig。。

result

Python_面向对象_类1的更多相关文章

  1. Python_面向对象_类2

    类的几个装饰器方法: @classmethod (类方法):使之无法访问实例变量 class Animal(object): def __init__(self, name): self.name = ...

  2. python中面向对象_类_对象的概念与定义

    1. 面向对象的概念,面向对象是一种编程思想. 是对现实世界中一类事物的抽象,在编程中可以理解为是一种建立现实世界事物的模型 2.  面向对象和面向过程的区别: 面向过程关注的是完成工作的步骤. 面向 ...

  3. java语言基础(四)_面向对象_类_对象_封装_构造

    面向对象 Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计.开发计算机程序. 这里的对象泛指现实中一切事物,每种事物都具备 ...

  4. Java核心基础第5篇-Java面向对象_类和对象

    Java面向对象之类和对象 一.面向对象概述 Java是完全的面向对象编程(Object Oriented Programming),简称OOP. 面向对象编程的思维方式更加符合大家的日常生活,因为我 ...

  5. python_面向对象_组合

    组合: 一个类的对象是另外一个类对象的属性 # 组合 # 一个类的对象是另一个类对象的属性 # 什么时候使用组合:当两个类之间的关系是 :什么有什么的关系 : 班级有学生 学生有班级 班级有课程 图书 ...

  6. Python_面向对象_单例模式

    class A(object): pass a1 = A() a2 = A() print(a1 == a2)print(id(a1))print(id(a2)) 结果: False 23257231 ...

  7. 黑马程序员_Java面向对象_内部类

    6.面向对象_内部类 1.内部类定义 内部类:将一个类定义在另一个类里面,对里面那个类就称为内部类.(内置类.嵌套类)内部类可以被私有修饰. 2.内部类访问规则 访问特点: 内部类可以直接访问外部类中 ...

  8. 【转】Python之面向对象与类

    [转]Python之面向对象与类 本节内容 面向对象的概念 类的封装 类的继承 类的多态 静态方法.类方法 和 属性方法 类的特殊成员方法 继承层级关系中子类的实例对象对属性的查找顺序问题 一.面向对 ...

  9. OC学习总结之面向对象和类

    OC学习总结之面向对象和类   Objective-c是c语言的母集合,它的原意就是在原始的c语言的主体上加入面向对象的特性.1.面向对象和面向过程  面向对象和面向过程是编程的两种思考方式.面向对象 ...

随机推荐

  1. nginx指定文件路径有两种方式root和alias

    背景 一直没明白这个配置啥意思,反正凑合用吧,不过老凑合总不是个事,没搞明白更容易忘,别人问还答不上来.反正也很简单,就搞明白点记下来. 知识点 root实例: location ^~ /t/ { r ...

  2. GBT MBR

    MBR最大支持2.2TB磁盘,它无法处理大于2.2TB容量的磁盘.MBR还只支持最多4个主分区——如果你想要更多分区,你需要创建所谓“扩展分区”,并在其中创建逻辑分区. GPT的全称是Globally ...

  3. 008_falcon磁盘io计算方法

    一.falcon磁盘IO告警计算方法 (1)线上告警示例 [falcon]环境: prod 时间: 2018-11-10 22:29 共1条 [#主机磁盘io过高(appid)]主机hostname磁 ...

  4. 请求Jenkins链接返回403

    使用python请求Jenkins链接,返回403 1.使用正确的账号密码(Jenkins -> 系统设置 -> 全局安全设置),该账户拥有访问该Jenkins链接的权限 2.代码中的账号 ...

  5. tcpdump抓取mysql语句

    抓包工具tcpdump的使用,抓取具体的sql语句 [root@test7_chat_api_im ~]# tcpdump -s -l - |strings tcpdump: listening on ...

  6. 前端----css 选择器

      css 为了修饰页面作用, 让页面好看 ⑴ css的引入方式1,行内样式body里面2,内接样式在html里面的 style 里面3,外接样式两种:①链接式: <link rel=" ...

  7. 【原创】Linux基础之命令行浏览器links

    有时服务器环境受限,比如在内网环境不能暴露端口从外网访问,用curl看html代码比较累,这时可以使用命令行浏览器来查看相关页面 links 官方:http://links.twibright.com ...

  8. VUE 多页面配置(一)

    1. 概述 1.1 说明 项目开发过程中会遇到需要多个主页展示情况,故在vue单页面的基础上进行配置多页面开发以满足此需求. 2. 实例 2.1 页面配置 2.1.1 默认首页 使用vue脚手架搭建后 ...

  9. 十大web安全扫描工具

    本文来源:绿盟整理  <十大web安全扫描工具> 十大web安全扫描工具 扫描程序可以在帮助造我们造就安全的Web 站点上助一臂之力,也就是说在黑客"黑"你之前, 先测 ...

  10. Confluence 6 用户宏最佳实践

    这个页面为你在创建用户宏的最佳实践中包含了一些小技巧和建议. 为你的宏添加一个简短的描述 我们鼓励你为你的宏在 模板(Template )添加一个备注的描述,可以参考下面的显示的内容: ## Macr ...