Python学习笔记 —— 类

来源:互联网 发布:nginx做负载均衡 编辑:程序博客网 时间:2024/06/05 04:46

Python是面向对象语言,自然也就有面向对象的一些属性,类,继承,实例自然也就有了,具体不做了解,只需要针对其与其他语言如objective-C进行一些区别概述,找其不同点来学习。

类   :描述具有相同的属性和方法的对象集合。定义了该集合中每个对象所共有的属性和方法。对象  :类的实例,通过类定义的数组结构实例化,包括两个数据成员(类变量和实例变量)和方法变量:    类变量     :【与其他不同】类变量是在整个实例化的对象中公用的,定义在类中且在函数体外。类变量通常不作为实例变量使用。    实例变量    :定义在方法中的变量,只作用于当前实例的类。方法  :类中定义的函数继承  :继承一个基类的字段和方法方法重写    :【继承前提】父类中继承的方法不能满足子类的需求,可以对其进行改写,称为方法覆盖或是重写。

类创建

格式:

class Animal:    'animal classf'

访问属性的方法:

getattr(obj,name[,default]) :访问对象的属性hasattr(obj,name)       :是否存在某一属性 setattr(obj,name,value) :设置一个属性,如果属性不存在,会创建一个新属性 delattr(obj,name)       :删除属性【与其他语言区别】  

例:

#!/usr/bin/python# -*- coding:UTF-8 -*-class Animal:    'animal class' #__doc__ 返回值    animalCount = 0    def __init__(self,name):        self.name = name        Animal.animalCount += 1    def count(self):        print 'Total animal %d' % Animal.animalCount    def display(self):        print 'name:',self.name#创建两个对象dog = Animal('Dog')cat = Animal('Cat')#调用方法dog.display()cat.display()dog.count()#修改属性值&调用方式一dog.name = 'Harri'   #can update attributedog.display()print 'dog\'s name',dog.name#修改属性值&调用方式二setattr(cat,'name','Jeen')  #可自己去添加属性,类似于runtime中的属性挂载print 'cat name :',getattr(cat,'name')#删除name属性delattr(dog,'name')print 'has attr dog.name',hasattr(dog,'name')#print dog.name #错误 提示无此属性setattr(dog,'age','10')print dog.age

Python内置属性

1. __dict__ :类调用,则返回类属性,对象调用则返回对象属性 
#如:>>>print '__dict__',Animal.__dict__#输出__dict__ {'count': <function count at 0x10b548758>, '__module__': '__main__', 'display': <function display at 0x10b548e60>, 'animalCount': 2, '__doc__': 'animal classf', '__init__': <function __init__ at 0x10b548140>}>>>print '__dict__',dog.__dict__#输出__dict__ {'age': '10'}
2. __doc__      :【类或对象】文档字符串,无论类或属性均返回
#如:print '__doc__',Animal.__doc__#输出__doc__ animal class
3. __name       : 【类】只能类调用,返回类名
#如:print '__name__',Animal.__name__#输出__name__ Animal
4. __module__   :【类或对象】类定义所在模块,返回一致
#如:print '__module__',Animal.__module__#输出__module__ __main__

注: 类的全名__main__.className,如果类位于一个导入模块module中,那么className.__module__等于module

5. __base__ :类的所有父元素构成的元组

Python的对象销毁

与OC一样,使用的是引用计数这一技术,参例:

a = 40  #创建对象b = a   #增加40的引用c = [b] #增加40引用del a   #减少40引用b = 100 #减少40引用c[10]   #减少40引用  此时计数为0便由解释器在适当时机销毁,【不是立刻销毁】

类继承

语法:

class 派生类名(基类名):  #基类名在括号中,基类是在类定义的时候,在元组中指明的。如果基类名比较多,则实现多继承    ‘description’

继承特点:

    1. 基类的构造方法(__init__()不会调用),它需要在其子类中主动调用    2. 在调用基类时,需要加上基类的类名前缀,且需要带上self参数变量。【区别普通函数】    3. 查找方法的流程:先从子类(派生类)中查找,找不到再去基类中找

例:

#!/usr/bin/python# -*- coding:UTF-8 -*-class Person:    #基类(父类)    age = 0    def __init__(self):        print '调用父类构造方法'    def personMethod(self):        print '调用了父类方法'    def setAge(self,age):        Person.age = age    def getAge(self):        print '父类属性',Person.ageclass Student(Person): #定义子类    def __init__(self):     #注释掉此方法便会调用父类构造方法        print '调用子类构造方法'     #Person.__init__(self)     #只有这样才会调用父类构造方法,传参需要带上self    def studentMethod(self):        print '调用子类方法's = Student()s.studentMethod()s.personMethod()s.getAge()s.setAge(20)s.getAge();#输出:调用子类构造方法调用子类方法调用了父类方法父类属性 0父类属性 20

判断继承关系

issubclass(sub,sup)     :判断是否为继承关系,并不只是一级继承isinstance(obj,Class)   :判断是否为一个类或其子类的实例

方法重写:父类方法功能不够使用时

只需要在子类中定义与父类一样的方法名一样的参数即可;
如:

#!/usr/bin/python# -*- coding:UTF-8 -*-class Person:    #基类(父类)    def printMethod(self):        print '调用了父类方法'class Student(Person): #定义子类    def printMethod(self):        print '调用子类方法',',展示更多信息's = Student()s.printMethod()     #会直接调用子类方法

基础重载方法:
重写方法:

    1. __init__(self[,args])    :构造函数 调用时机 obj = className(args)    2. __del__(self)        :删除对象时 调用时机 del obj  或obj引用为0进    3. __repr__(self)       :转换为供解释器读取的方式   调用时机 repr(obj)    4. __cmp__(self.x)      :对象比较   调用时机cmp(obj,x)    5. __add__(self.other)      :运算符重载  调用时机 obj1 + obj2

例:

#!/usr/bin/python# -*- coding:UTF-8 -*-class Person:    #基类(父类)    x = 10    y = 20    def printMethod(self):        print '调用了父类方法'class Student(Person): #定义子类    def printMethod(self):        print '调用子类方法',',展示更多信息'    def __cmp__(self,other):        return self.x - other.x    def __add__(self,other):        return self.x + other.x ,self.y + other.ys = Student()s2 = Student()setattr(s2,'x',15)print cmp(s,s2)     #比较print repr(s)print str(s2)print s + s2    #重载运算符

可重写del方法探究

__del__     : 当对象不再被使用时,__del__方法执行

例:

#!/usr/bin/python# -*- coding:UTF-8 -*-class Demo:    def __init__(self,x=0,y=0):        self.x = x        self.y = y    def __del__(self):        class_name = self.__class__.__name__        print class_name, '销毁'd1 = Demo()d2 = d1d3 = d1print id(d1),id(d2),id(d3)del d1del d2del d3#输出4561976640 4561976640 4561976640Demo 销毁

补充

私有属性:    __private_attrs     :两个下划线开头,声明该属性为私有,不能在类外部(包括实例话对象)被使用或直接访问。在类内部调用方式:self.__private__attrs.类方法: 在类的内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,其必须包含一个参数self,且为第一个参数私有方法:    __private_method    :两个下划线开头,声明方法为私有方法,不能在类外部调用,只能在内部调用 方式: self.__private_methods()  

-

注:1. 类中声明的私有变量不能在实例化对象中使用,如需要使用,需要用obj._ClassName__attri,这样在实例对象中便可以使用,不推荐2. 声明定义私有方法时需要添加self参数【类方法标志】,但调用时不可以传入self【只能在本类调用】

如:

#!/usr/bin/python# -*- coding:UTF-8 -*-class Person:    #基类(父类)    x = 10    y = 20    def __sum(self,a,b):        #声明一个私有方法        print a + b    def printMethod(self):        print '调用了父类方法'        self.__sum(self.x,self.y)   #注意因为私有方法只能在本类中调用,所以第一个参数self已经被省略了【一定要注意】class Student(Person): #定义子类    def __init__(self,x = 20,y = 30):        self.x = x        self.y = y        print '在子类中进行了初始化'    def printMethod(self):        print '调用了子类方法'        Person.printMethod(self)s = Student()s.printMethod()#输出在子类中进行了初始化调用了子类方法调用了父类方法50
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 热血三国3要塞打不过去怎么办 清香木夏天有黄叶和掉叶怎么办 生完宝宝妊娠纹还在继续疯长怎么办 陌陌不能最小化观看直播视频怎么办 苏州园区公积金密码忘记了怎么办 房产企业申请破产买的房子怎么办 被业务员骗了买了保险怎么办 孩子特别害怕老师严厉的批评怎么办 4k电视看有线电视不清晰怎么办 移动9.9流量4g网用完了怎么办 东方头条验证码已经被注册了怎么办 打王者两个人吵架被夹在中间怎么办 顾客拿过期的食品过来投诉怎么办 老婆总是埋怨我父母我该怎么办? 代款公司如果使用暴力追债怎么办 法院拍卖款分配有疑意怎么办 法院拍卖买到的房子里有户口怎么办 新注册手机邮箱不和电脑同步怎么办 移动4g盒当月流量封顶怎么办 昆仑加油卡密码忘记了怎么办 昆仑银行e盾密码忘记了怎么办 中石化加油卡密码忘记了怎么办 壳牌加油卡密码忘了怎么办 中国石化加油卡密码忘了怎么办 中石化加油卡密码忘了怎么办 中石化加油卡需要密码忘了怎么办 求不熟领导办事送礼不收怎么办 送礼给领导不收好像很生气怎么办 加油卡没有密码加油后锁住怎么办 个人怎么办中石化油卡怎么开公司票 中石化副卡挂失后钱怎么办 中石化的加油卡丢了怎么办 得仕卡过期3年了怎么办 如果在超市买到过期商品怎么办 华润万家买的豆干过期了吃了怎么办 华润万家购物卡过期了怎么办 杜鹃花水浇多了树叶都掉了怎么办 游客行程因天气原因无法进行怎么办 携程旅游途中提前结束行程怎么办 小区附近商家卖东西很吵怎么办? 小区门口卖东西的喇叭太吵怎么办