Python学习之类与对象详解
本帖最后由 2757471825 于 2017-4-14 22:00 编辑本文和大家分享的主要是python中类与对象相关内容,一起来看看吧,希望对大家学习python有所帮助。 面向对象编程的2个非常重要的概念:类和对象。 对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念——类。 类就相当于制造飞机时的图纸,用它来进行创建的飞机就相当于对象。 定义一个类 class person: age=10 #下面sex没有进行初始化是会报错的 #sex name="intsmaze" def getPersonInfo(self): print("age is %d;name is %s"%(self.age,self.name)) 必须要进行tab缩进来区分类的成员,同时类的属性必须指定一个值,否则会报NameError: name '_person__age' is not defined错误。 创建类的对象 vi demo.py class person: age=10 name="intsmaze" def getPersonInfo(self): print("age is %d;name is %s"%(self.age,self.name))# 创建对象 ly=person()# 调用对象的getPersonInfo方法 ly.getPersonInfo()# 访问属性 print(ly.age) python demo.py age is 10;name is intsmaze10 创建对象的格式为: 对象名 = 类名()。 这里的name和age都是 公有 的,可以直接在类外通过对象名访问,如果想定义成 私有的,则需在前面加2个下划线 即'__'。 vi demo2.py class person: __age=10 __name="intsmaze" def getPersonInfo(self): print("age is %d;name is %s"%(self.__age,self.__name)) ly=person() ly.getPersonInfo() print(ly.__age) python demo2.py age is 10;name is intsmaze Traceback (most recent call last): File "class2.py", line 9, in <module> print(ly.__age) AttributeError: person instance has no attribute '__age' 私有属性是不能够在类外通过对象名来进行访问的。在Python中没有像C++中public和private这些关键字来区别公有属性和私有属性,它是以属性命名方式来区分,如果在属性名前面加了2个下划线'__',则表明该属性是私有属性,否则为公有属性(方法也是一样,方法名前面加了2个下划线的话表示该方法是私有的,否则为公有的)。 类的方法 在类中可以定义一些方法,定义方法采用 def 关键字,在类中定义的方法至少会有一个参数,一般以名为 self 的变量作为该参数(用其他名称也可以),而且需要作为第一个参数。 vi demo3.py class person: __age=18 def getPersonInfo(self): print("age is %d"%self.__age) def getPersonInfo2(self,age): if(self.__age<age): print("too old") else: self.__age=age print("age is %d"%self.__age) ly=person() ly.getPersonInfo() ly.getPersonInfo2(20) ly.getPersonInfo2(10) python中没有重载的概念,即不能方法重载。 python demo3.py age is 18 too old age is 10 所谓的self,可以理解为自己。可以把它当做C++中类里面的this指针一样理解,就是对象自身的意思,在用某个对象调用该方法时,就将该对象作为第一个参数传递给self。 类的构造器 vi demo4.py class person: __age=10 __name="intsmaze" def __init__(self): self.__age=20 self.__name="liuyang" def getPersonInfo(self): print("age is %d;name is %s"%(self.__age,self.__name)) ly=person() ly.getPersonInfo() python demo4.py age is 20;name is liuyang 对象在默认调用 __init__() 方法的时候传递一些参数 vi demo5.py class person: __age=10 __name="intsmaze" #def __init__(self): # self.__age=20 # self.__name="liuyang" def __init__(self, age, name): self.__age = age self.__name = name def getPersonInfo(self): print("age is %d;name is %s"%(self.__age,self.__name)) #ly=person()#ly.getPersonInfo() ly=person(100,"hello") ly.getPersonInfo() python demo5.py age is 100;name is hello 构造器也不能重载,如果把上面的注释去掉,调用脚本将会报错。 构造器方法,在创建一个对象时默认被调用,不需要手动调用。 析构 创建对象时,默认调用 构造方法 ;当删除一个对象时,同样也会默认调用一个方法,这个方法为 析构方法 。 vi dem6.py # 创建对象#encoding=utf-8class Animal(): # 构造方法 def __init__(self): print '---构造方法被调用---' # 析构方法 def __del__(self): print '---析构方法被调用---' # 创建对象 dog = Animal() # 删除对象del dog python dem6.py ---构造方法被调用------析构方法被调用---
来源:博客园
页:
[1]