(1)定义类和实例

  这一部分难得和 Java 较为一致,直接写个例子:

 class Stu:
def __init__(self, name, id): # 构造方法
self.name = name
self.id = id
def test(self, name2):
print('He is {}'.format(name2))
student = Stu('Bob', '')
print(student.name, student.id) # Bob 123
student.test('LQ')

  注意一点:类中自定义的方法一定要含有 self 参数,但是在调用的时候,无需为此传递参数。

  如果需要将name或者id设置成私有变量,则加上短横线如:self._name 与 self._id 。则通过 get/set 方法进行控制(避免传入不必要参数)。

  Python 中 _***_ 结构的变量是特殊变量(不是私有变量),特殊变量是可以直接访问的。

(2)继承和多态

  主要是语法,内容应该都熟悉:

 class Animal(object):
def run(self):
print('Animal is running...') # 子类方法继承父类方法
class Dog(Animal):
pass
d = Dog()
d.run() # Animal is running... # 子类方法覆盖父类方法.多态
class Cat(Animal):
def run(self):
print('Cat is running...')
c = Cat()
c.run() # Cat is running... print(isinstance(c, Cat)) # True
print(isinstance(c, Animal)) # True

(3)动态语言 vs 静态语言

  静态和动态是相对的,C/C++/Java 是静态语言,Python是动态语言。具体来说,在静态语言中每个变量都有固定的变量类型比如Java 中 String str = 'abc',那么此时 str = 1 这样的赋值语句会报错。相反,动态语言中定义变量无需固定死变量类型,a = 1 之后 a = '111' 也不会报错。

  静态变量易于调试,因为在内存中固定为某一区域且易于月度,动态变量书写随意,不易调试(因为变量可能别重新定义成另一种类型)不易阅读。

  动态语言的编程称为鸭子类型,例如迭代对象需要有_inter()_,动态语言中不需要管这个对象是继承下来的还是什么,只要有这个方法,就被当作可迭代对象(秀晕了)。

(4)_slots_

  动态语言允许我们给类或者实例随意绑定方法和属性:

 class Stu():
pass def hello(self): # 如果要将该方法绑定给某个实例,self 参数不可少
print('开心就vans了') student = Stu() # 给实例绑定属性
student.name = ''
print(student.name) # 给实例绑定方法。但是对其他实例不起作用
from types import MethodType
student.hello = MethodType(hello, student)
student.hello() # 开心就vans了 # 给Class绑定方法
Stu.hello = hello
student2 = Stu()
student2.hello() # 开心就vans了

  如果我们需要对类进行限制,比如只能绑定 name、id 两个属性,可以使用_slots_ :(但是_slots_对继承的子类没有约束)

 class Stu():
__slots__ = ('name', 'id')
pass student = Stu() # 给实例绑定属性
student.name = ''
student.age = 22 # 绑定失败
print(student.name)
print(student.age)

  

Python基础(六)——面向对象编程的更多相关文章

  1. Day7 - Python基础7 面向对象编程进阶

    Python之路,Day7 - 面向对象编程进阶   本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个 ...

  2. Python基础7 面向对象编程进阶

    本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 经典 ...

  3. Python基础-week06 面向对象编程基础

    一.面向对象编程 1.面向过程 与 面向对象编程 面向过程的程序设计: 核心是 过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式 ...

  4. Python基础之面向对象编程

    面向对象编程 —— Object Oriented Programming 简写 OOP 01. 面向对象基本概念 我们之前学习的编程方式就是 面向过程 的 面向过程 和 面向对象,是两种不同的 编程 ...

  5. Day6 - Python基础6 面向对象编程

    Python之路,Day6 - 面向对象学习   本节内容:   面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法.     引子 你现在是一家游戏公司的开发 ...

  6. Python基础6 面向对象编程

    本节内容:   面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法.     引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战> ...

  7. python基础之面向对象编程介绍、类和对象

    面向对象变成介绍 面向过程编程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西.主要应用在一旦完成很少修改的地方,如linux ...

  8. Python基础——6面向对象编程

    类和实例 类是抽象的模版,例如汽车:而实例则是拥有相同方法的类的实现,例如汽车里面有大众.宝马.奔驰等等,这些车都能在地面上跑,但是它们的具体数据可以不一样. calss Student(object ...

  9. Python基础-week06 面向对象编程进阶

    一.反射 1.定义:指的是通过字符串来操作类或者对象的属性 2.为什么用反射? 减少冗余代码,提升代码质量. 3.如何用反射? class People: country='China' def __ ...

  10. Python基础:函数式编程

    一.概述 Python是一门多范式的编程语言,它同时支持过程式.面向对象和函数式的编程范式.因此,在Python中提供了很多符合 函数式编程 风格的特性和工具. 以下是对 Python中的函数式编程 ...

随机推荐

  1. 牛客小白月赛13 G(双向搜索)

    AC通道 两边同步搜,一步里面A走一次B走两次,遇到对方走过的地方就得到了答案. #include <bits/stdc++.h> using namespace std; const i ...

  2. 关于MySQL索引的一点小见解

    索引: 优缺点: 1.用的合理可以提高查询效率 2.建立过多索引会占用物理和数据空间,同时也会降低插入和更新效率 需不需要建立索引: 1.一般表的数据低于2000条就不用建立索引了,超过2000条酌情 ...

  3. redis安装&启动

    1.下载:redis.io,我下载的是5.0. 2.安装 1).tar -zxvf redis-5.0.0 2).进入src目录,执行make 3.回退到src的上一级目录,编辑redis.conf ...

  4. NET Core 2.0 微服务跨平台实践

    NET Core 2.0 微服务跨平台实践 相关博文: Ubuntu 简单安装 Docker Mac OS.Ubuntu 安装及使用 Consul Consul 服务注册与服务发现 Fabio 安装和 ...

  5. E. Mike and Foam 容斥原理

    http://codeforces.com/problemset/problem/548/E 这题是询问id,如果这个id不在,就插入这个id,然后求a[id1] ,  a[id2]互质的对数. 询问 ...

  6. poj 2406 Power Strings 后缀数组解法

    连续重复子串问题 poj 2406 Power Strings http://poj.org/problem?id=2406 问一个串能否写成a^n次方这种形式. 虽然这题用kmp做比较合适,但是我们 ...

  7. setState异步函数

    changeLeader(value){ console.log(value)   this.setState({   leader:value   },() => {   console.lo ...

  8. Python踩坑之旅其二裸用os.system的原罪

    目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4.1 技术关键字 1.5 填坑总结 2. 前坑回顾 2.1 Linux中, 子进程拷贝父进程哪些信息 2.2 Agent常驻进程选择& ...

  9. CI框架自带的验证工具及汉化

    本人自己还是很喜欢CI框架自带的验证工具的,使用方式如下: /** *@blog<http://www.phpddt.com> */ public function do_login() ...

  10. css3相关样式

    1.渐变 1.1 线性渐变(Linear Gradients)- 向下/向上/向左/向右/对角方向 background: linear-gradient(direction, color-stop1 ...