Python面向对象的编程注意细节
和前文一样,这了也是学习过程中,来源于网上各种资料的一个整合记录,希望能够帮到自己和大家;
主要的关注点是在使用class的时候,应该注意的一些细节;
1.在class里面,有了 __init__(self,...)函数之后,构造对象就不能用空的参数了,相当于java里面有了构造函数之后就不能使用默认的构造函数了;
2.__init__(self,...)函数的第一个参数永远是默认的self,调用的时候不用传入;
3.python允许对象实例化以后动态的绑定任何数据,所以同一个类的不同实例可能有不同的属性:
#对象可以随意绑定对象,所以同一个类的不同实例可以拥有不同的属性;
Jack.age = 17
print(Jack.age)
#Robin对象没有属性age,下面的语句就会报错
#print(Robin.age)
4.python里面,类中的变量如果不想被外面访问,就用 __name,__score,即在变量名字前面加上俩个下划线,但是 __name__ 这样的变量是特殊变量,是可以被访问的;
5.python是一种动态的语言,java是一种静态的语言,在多态问题上就可以看出来,python只需要调用函数的对象有同名的方法即可,不管是否是原来对象的子类;
# -*- coding: utf-8 -*- 'test class 多态' class Animal(object):
def run(self):
print("Animal is running...") class Cat(Animal):
def run(self):
print("Cat is running...") class Dog(Animal):
def run(self):
print('Dog is running...') animal = Animal()
cat = Cat()
dog = Dog()
animal.run()
cat.run()
dog.run() #判断对象的数据类型,便于理解多多态的概念
print(isinstance(cat, Cat))
#说明cat对象不仅仅是Cat的实例,也是Animal的实例;
print(isinstance(cat, Animal))
#但是Animal就不是cat 或者dog
print(isinstance(animal, Cat),isinstance(animal, Dog)) #多态:编写一个函数,根据传入的对象的不同类型,调用对应的run()函数;
def run_twice(animal):
animal.run()
animal.run() run_twice(animal)
run_twice(cat)
run_twice(dog)
#这里只是为了说明这个动态语言的问题
def NotAnimal(object):
def run(self):
print('I am not a animal but i can invoke runtwice() too...')
notanimal = NotAnimal()
run_twice(notanimal)
6.python文件的读写,
with open('D://path') as f:
print(f.read())
为了每次都能在打开文件之后关闭文件,并且让书写简单,with会自动调用f.close()
Python面向对象的编程注意细节的更多相关文章
- Python面向对象基础:编码细节和注意事项
在前面,我用了3篇文章解释python的面向对象: 面向对象:从代码复用开始 面向对象:设置对象属性 类和对象的名称空间 本篇是第4篇,用一个完整的示例来解释面向对象的一些细节. 例子的模型是父类Em ...
- python 面向对象高级编程
数据封装.继承和多态只是面向对象程序设计中最基础的3个概念.在Python中,面向对象还有很多高级特性,允许我们写出非常强大的功能. 我们会讨论多重继承.定制类.元类等概念.
- python面向对象高级编程
正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: >>> class Studen ...
- Python面向对象高级编程-__slots__、定制类,枚举
当在类体内定义好各种属性后,外部是可以随便添加属性的,Python中类如何限制实例的属性? Python自带了很多定制类,诸如__slots__,__str__ __slots__ __slots__ ...
- Python面向对象高级编程:@property--把方法变为属性
为了限制score的范围,可以通过一个set_score()方法来设置成绩,再通过一个get_score()来获取成绩,这样,在set_score()方法里,就可以检查参数: >>> ...
- Python面向对象高级编程:__slot__(给实例添加方法、属性)
纲要: 本章总的来说是给实例添加属性,给类添加方法两个主题,以及相应的作用范围.总结如下: 1.给实例添加属性(作用范围:当然是只对当前实例有效): 2.用__slots__限制可以给实例添加的属性( ...
- Python面向对象高级编程-@property
使用@property 在绑定属性时,如果直接把属性暴露出去,虽然写起来简单,但是没法检查参数,导致可以把成绩随便改: >>> class Student(object): pass ...
- Python面向对象高级编程-_slots_
使用_slots_ 正常情况下,当定义一个class,创建一个class的实例后,可以给实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: >>> class Stu ...
- python面向对象的编程
self相当于在实例化类的过程中传入参数,实例化对象本身 静态方法,静态字段属于类,动态字段,动态方法输入每一个实例化的对象 类实例化的过程把一些属性,方法封装到一个实例化对象当中 动态字段,动态方法 ...
随机推荐
- iOS 集成阿里百川最新版(3.1.1.96) 实现淘宝授权登录以及调用淘宝客户端商品详情页
公司最近要做第三方登录,由于是做导购项目,必不可少的有淘宝的授权登录.本来就是一个授权登录,没什么大不了的.但淘宝的无线开放业务——阿里百川更新的最新版本3.1.1.96,开发文档不是不详细,是很 ...
- PowerDesigner如何导出表到word的方法
from:https://jingyan.baidu.com/article/295430f1c385970c7f005056.html PowerDesigner如何导出表到word的方法 听语音 ...
- Win MYSQL5.7.19压缩版安装
最近需要在wins上安装MYSQL,发现最新的版本和之前的有点差距,再次记录一下 1.下载:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5. ...
- SQL获取某个时间字符串里的月和日,获取某天是周几
select datename(weekday,'2016-11-4') as '周' select convert(varchar,datepart(month,'2016-11-4')) as ' ...
- SharePoint服务器端对象模型 之 访问网站和列表数据(Part 2)
(二)列表(SPList) 列表是SharePoint中最为重要的数据容器,我们一般保存在SharePoint中的所有数据,都是保存在列表中(文档库也是一种列表),因此列表对象在SharePoint的 ...
- Xamarin.Forms学习之Platform-specific API和文件操作
这篇文章的分享原由是由于上篇关于Properties的保存不了,调用SavePropertiesAsync()方法也不行,所以我希望通过操作文件的方式保存我的需要的数据,然后我看了一下电子书中的第二十 ...
- coursera 《现代操作系统》 -- 第十周 文件系统(2)
身份验证 Authentication 知道用户是谁.通过账号密码.Id 这样的识别出来. 访问控制 Permission 知道用户是谁后. 主动控制 记录用户ID和对应的访问权限 --> 记录 ...
- 2014-08-28——移动端,触摸事件 touchstart、touchmove、touchend、touchcancel
1.Touch事件简介在移动终端上的web页面触屏时会产生ontouchstart.ontouchmove.ontouchend.ontouchcancel 事件,分别对应了触屏开始.拖拽及完成触屏事 ...
- lodash的使用
Lodash是一个一致性.模块化.高性能的 JavaScript 实用工具库,内部封装了很多字符串.数组.对象等常见数据类型的处理函数. 为什么选择 Lodash ? Lodash 通过降低 arra ...
- python 元类metaclass
文章转自:http://www.cnblogs.com/linhaifeng/articles/8029564.html 一 知识储备 exec:三个参数 参数一:字符串形式的命令 参数二:全局作用域 ...