Python基础(六)——面向对象编程
2019-05-22 06:33:22来源:博客园 阅读 ()
(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 中 _***_ 结构的变量是特殊变量(不是私有变量),特殊变量是可以直接访问的。
(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
(3)动态语言 vs 静态语言
静态和动态是相对的,C/C++/Java 是静态语言,Python是动态语言。具体来说,在静态语言中每个变量都有固定的变量类型比如Java 中 String str = 'abc',那么此时 str = 1 这样的赋值语句会报错。相反,动态语言中定义变量无需固定死变量类型,a = 1 之后 a = '111' 也不会报错。
静态变量易于调试,因为在内存中固定为某一区域且易于月度,动态变量书写随意,不易调试(因为变量可能别重新定义成另一种类型)不易阅读。
动态语言的编程称为鸭子类型,例如迭代对象需要有_inter()_,动态语言中不需要管这个对象是继承下来的还是什么,只要有这个方法,就被当作可迭代对象(秀晕了)。
(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)
原文链接:https://www.cnblogs.com/KongHuZi/p/10890172.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash