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相当于在实例化类的过程中传入参数,实例化对象本身 静态方法,静态字段属于类,动态字段,动态方法输入每一个实例化的对象 类实例化的过程把一些属性,方法封装到一个实例化对象当中 动态字段,动态方法 ...
随机推荐
- 在DLL中动态加载其所依赖的dll
windows下LoadLibrary函数的搜索顺序是先搜索system32等系统环境变量path下注册过的路径,然后是当前路径. 这里的相对路径是指的主exe所在路径,并且相对路径在程序运行过程中可 ...
- linux以下C 利用openssl的AES库加密,解密
OpenSSL提供了AES加解密算法的API const char *AES_options(void); AES算法状态,是所有支持或者是部分支持. 返回值:"aes(full)" ...
- java编程:将数组的第一个为最大第二个为最小以此类推
import java.util.Scanner; public class Max_Min { public static void main(String[] args) { int[] a = ...
- codeblocks在进行多线程出现phread问题
undefined reference to 'pthread_create' 出现这个错误是因为编译默认不会链接进程库. 可以选择用gcc进行编译 加上-lpthread 比如:gcc exampl ...
- Kotlin——初级篇(四):控制语句详解
在前面 的章节中讲解了Kotlin语言中的数据类型.变量与常量的定义.不了解请参见前面的内容: Kotlin--初级篇(三):数据类型详解. Kotlin--初级篇(二)常量.变量.注释. 下面详细为 ...
- poj1676(转换为二进制求解)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=13175 题目关键:将0~9十个数转换为二进制数进行枚举比较 int ...
- servlet3.0 的新特性之二注解代替了web.xml配置文件
servlet3.0 的新特性: 注解代替了 web.xml 文件 支持了对异步的处理 对上传文件的支持 1.注解代替了配置文件 1.删除了web.xml 文件 2. 在Servlet类上添加@Web ...
- Android 屏幕适配扫盲、教程
转载请注明出处:http://blog.csdn.net/my_truelove/article/details/66584865 訪问 ruicb.com,一键抵达我的博客! 扫描左側或右下方二维码 ...
- STL中的二分查找——lower_bound 、upper_bound 、binary_search
STL中的二分查找函数 1.lower_bound函数 在一个非递减序列的前闭后开区间[first,last)中.进行二分查找查找某一元素val.函数lower_bound()返回大于或等于val的第 ...
- app开发学习需要经历哪些流程
app开发学习需要经历哪些流程?如何零基础入门app开发?以下是知乎热心开发者的经验总结,对学习app开发有很好的参考意义 1.如果没有编程基础的,学习基础知识的过程肯定是必须的.2.有了一些基础 ...