Python基础(六)——面向对象编程
(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基础(六)——面向对象编程的更多相关文章
- Day7 - Python基础7 面向对象编程进阶
Python之路,Day7 - 面向对象编程进阶 本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个 ...
- Python基础7 面向对象编程进阶
本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 经典 ...
- Python基础-week06 面向对象编程基础
一.面向对象编程 1.面向过程 与 面向对象编程 面向过程的程序设计: 核心是 过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式 ...
- Python基础之面向对象编程
面向对象编程 —— Object Oriented Programming 简写 OOP 01. 面向对象基本概念 我们之前学习的编程方式就是 面向过程 的 面向过程 和 面向对象,是两种不同的 编程 ...
- Day6 - Python基础6 面向对象编程
Python之路,Day6 - 面向对象学习 本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引子 你现在是一家游戏公司的开发 ...
- Python基础6 面向对象编程
本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战> ...
- python基础之面向对象编程介绍、类和对象
面向对象变成介绍 面向过程编程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西.主要应用在一旦完成很少修改的地方,如linux ...
- Python基础——6面向对象编程
类和实例 类是抽象的模版,例如汽车:而实例则是拥有相同方法的类的实现,例如汽车里面有大众.宝马.奔驰等等,这些车都能在地面上跑,但是它们的具体数据可以不一样. calss Student(object ...
- Python基础-week06 面向对象编程进阶
一.反射 1.定义:指的是通过字符串来操作类或者对象的属性 2.为什么用反射? 减少冗余代码,提升代码质量. 3.如何用反射? class People: country='China' def __ ...
- Python基础:函数式编程
一.概述 Python是一门多范式的编程语言,它同时支持过程式.面向对象和函数式的编程范式.因此,在Python中提供了很多符合 函数式编程 风格的特性和工具. 以下是对 Python中的函数式编程 ...
随机推荐
- CodeForces - 894A-QAQ(思维)
"QAQ" is a word to denote an expression of crying. Imagine "Q" as eyes with tear ...
- GPU程序缓存(GPU Program Caching)
GPU程序缓存 翻译文章: GPU Program Caching 总览 / 为什么 因为有一个沙盒, 每一次加载页面, 我们都会转化, 编译和链接它的GPU着色器. 当然不是每一个页面都需要着色器, ...
- csu 1554: SG Value 思维题
http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1554 这题在比赛的时候居然没想出来,然后发现居然是做过的题目的变种!!!! 先不考虑插入操作, ...
- ms sqlserver 清除数据库日志脚本
USE [master] GO ALTER DATABASE F360DW SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE F360DW SET ...
- MVC下载文件方式 包括网络地址文件
MVC下载文件方式 方式一: public FileStreamResult DownFile(string filePath, string fileName){ string absol ...
- ArrayList 练习题
1点名器 import java.util.ArrayList; import java.util.Random; import java.util.Scanner; class CallName3 ...
- 多线程(Thread、线程创建、线程池)
第1章 多线程 1.1 多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程 ...
- jquery 一键复制到剪切板
今天做项目有一个功能,通过点击事件复制一段文本到剪切板,在网上找了一些,整理了一下,方便需要的朋友使用. <a id="copy" data-text="12345 ...
- Junit-@Annotation-动态代理-类加载器
一.测试单元 概述:用于测试JAVA代码的工具类,已内置在Eclipse中; 格式: 1.在方法的上面添加@Test; 2.对被测试的方法的要求:权限- ...
- React日常注意点
1.在定义组件的时候,名字首字母一定要大写 最近刚学,我会持续把自己学习过程中的的注意点在这里逐个列出,敬请等待!