当前位置:
首页 > Python基础教程 >
-
python基础教程之Python基础(六)——面向对象编
回到顶部(go to top)
(1)定义类和实例
这一部分难得和 Java 较为一致,直接写个例子:
1 class Stu: 2 def __init__(self, name, id): # 构造方法 3 self.name = name 4 self.id = id 5 def test(self, name2): 6 print('He is {}'.format(name2)) 7 student = Stu('Bob', '123') 8 print(student.name, student.id) # Bob 123 9 student.test('LQ')
注意一点:类中自定义的方法一定要含有 self 参数,但是在调用的时候,无需为此传递参数。
如果需要将name或者id设置成私有变量,则加上短横线如:self._name 与 self._id 。则通过 get/set 方法进行控制(避免传入不必要参数)。
Python 中 _***_ 结构的变量是特殊变量(不是私有变量),特殊变量是可以直接访问的。
回到顶部(go to top)
(2)继承和多态
主要是语法,内容应该都熟悉:
1 class Animal(object): 2 def run(self): 3 print('Animal is running...') 4 5 # 子类方法继承父类方法 6 class Dog(Animal): 7 pass 8 d = Dog() 9 d.run() # Animal is running... 10 11 # 子类方法覆盖父类方法.多态 12 class Cat(Animal): 13 def run(self): 14 print('Cat is running...') 15 c = Cat() 16 c.run() # Cat is running... 17 18 print(isinstance(c, Cat)) # True 19 print(isinstance(c, Animal)) # True
回到顶部(go to top)
(3)动态语言 vs 静态语言
静态和动态是相对的,C/C++/Java 是静态语言,Python是动态语言。具体来说,在静态语言中每个变量都有固定的变量类型比如Java 中 String str = 'abc',那么此时 str = 1 这样的赋值语句会报错。相反,动态语言中定义变量无需固定死变量类型,a = 1 之后 a = '111' 也不会报错。
静态变量易于调试,因为在内存中固定为某一区域且易于月度,动态变量书写随意,不易调试(因为变量可能别重新定义成另一种类型)不易阅读。
动态语言的编程称为鸭子类型,例如迭代对象需要有_inter()_,动态语言中不需要管这个对象是继承下来的还是什么,只要有这个方法,就被当作可迭代对象(秀晕了)。
回到顶部(go to top)
(4)_slots_
动态语言允许我们给类或者实例随意绑定方法和属性:
1 class Stu(): 2 pass 3 4 def hello(self): # 如果要将该方法绑定给某个实例,self 参数不可少 5 print('开心就vans了') 6 7 student = Stu() 8 9 # 给实例绑定属性 10 student.name = '2222' 11 print(student.name) 12 13 # 给实例绑定方法。但是对其他实例不起作用 14 from types import MethodType 15 student.hello = MethodType(hello, student) 16 student.hello() # 开心就vans了 17 18 # 给Class绑定方法 19 Stu.hello = hello 20 student2 = Stu() 21 student2.hello() # 开心就vans了
如果我们需要对类进行限制,比如只能绑定 name、id 两个属性,可以使用_slots_ :(但是_slots_对继承的子类没有约束)
1 class Stu(): 2 __slots__ = ('name', 'id') 3 pass 4 5 student = Stu() 6 7 # 给实例绑定属性 8 student.name = '2222' 9 student.age = 22 # 绑定失败 10 print(student.name) 11 print(student.age)
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式