python面向对象类的使用

来源:互联网 发布:电视网络端口是什么 编辑:程序博客网 时间:2024/06/11 09:12
#!/usr/bin/python#coding=utf-8#python类定义和创建#python类对象结构有两个数据成员(类变量和实例变量)和方法#类变量:类变量在整个实例化的对象是公用的,类变量定义在类中且在函数体之外,类变量通常不作为实例变量使用(类似于c++中的静态变量,所有对象共有一份变量)#实例变量:定义在方法中的变量,在__init__构造函数中的变量,(类似于c++的成员变量)#类中的方法:类的方法和普通函数有一个区别,就是它们必须有一个额外的第一个参数名称,惯例名称一般是selfclass person:'所有actress的基类'PersonCount=0#类变量,通过类名访问def __init__(self,name,age):self.name=name#实例变量self.age=age#实例变量person.PersonCount+=1def displayCount(self):print "total person %d" % person.PersonCountdef displayPerson(self):print "name:",self.name, ",age:",self.age #创建类对象PerOne=person("白石茉莉奈",28)PerTwo=person("滨崎真绪",25)PerOne.displayPerson()PerTwo.displayPerson()print "total person %d" % person.PersonCount#getattr(对象名,属性名) 访问对象的属性(返回属性的值)#hasattr(对象名,属性名) 检测对象是否有这个属性,有返回true #setattr(对象名,属性名,值) 设置属性的值,如果没有此属性,会创建一个新属性 #delattr(对象名,属性名) 删除属性 #添加类的属性PerOne.salary=100000if (hasattr(PerOne,'salary')):print "有salary属性"else:print "没有salary属性"#python内置类属性#__dict__:类的属性(包含一个自动,由类的数据属性组成)#__doc__:类的文档字符串#__name__:类名#__module__:类定义所在的模块(类的全名'__main__.className',如果类位于一个导入mymodule模块中,那么className.__module__就是mymodule)#__bases__:类的所有父类构成的元素(包含了一个有所有父类组成的元组)print "Person__dict__:",person.__dict__print "Person.__doc__:",person.__doc__print "Person.__name__:",person.__name__print "Person.__module__:",person.__module__print "Person.__bases__:",person.__bases__#析构函数__del__当对象不再使用时__del__方法运行class testdel:def __init__(self,x=0,y=0):self.x=xself.y=ydef __del__(self):classname=self.__class__.__name__print classname,"析构"t1=testdel()t2=t1t3=t1print id(t1),id(t2),id(t3)del t1del t2del t3#类的继承#类继承语法:class subclassname(parentclassname1,parentclassname2,...)#python中继承的特点#1在继承中基类的构造不会自动调用,它需要在其派生类的构造中亲自专门调用#2在子类中调用基类的方法是,需要加上基类的类名前缀,且带上self参数变量,区别在于类中调用普通函数时并不需要带上self参数class Dad:dadvar=10def __init__(self):print "调用父类的构造函数"def dadmethod(self):print "调用父类的方法"def setdad(self,attr):Dad.dadvar=attrdef getdad(self):print "父类属性:",Dad.dadvarclass son(Dad):#继承def __init__(self):Dad.__init__(self)#在子类中调用父类的构造print "子类构造函数"def sonmethod(self):print "调用子类的方法"s=son()s.sonmethod()s.dadmethod()s.setdad(300)s.getdad()#python方法重写class parent:def myfun(self):print "调用父类方法"class child(parent):def myfun(self):print "调用子类方法"c=child()c.myfun()#python运算符重载class vec:def __init__(self,a,b):self.a=aself.b=bdef __str__(self):#重载输出return 'vec(%d,%d)'%(self.a,self.b)def __add__(self,vec2):#重载加法运算符return vec(self.a+vec2.a,self.b+vec2.b)v1=vec(10,20)v2=vec(30,40)print v1+v2#python中的声明私有变量和函数,只要在前面加双下划线(__)就声明为私有的class count:__privatevar=0#私有变量publicvar=0#公有变量def addcount(self):self.__privatevar+=1self.publicvar+=1print "私有变量:",self.__privatevarcou=count()cou.addcount()cou.addcount()print "类外输出公有变量:",cou.publicvar#print cou.__privatecvarpython中实例不能访问私有变量print "类外访问私有变量:",cou._count__privatevar#实例化不能访问私有数据,可以使用(对象名._类名__私有属性)访问私有数据'''1__foo__:两个双下划线定义的是特殊方法,一般是系统定义的名字.2_foo:单下划线开头表示的是proted(保护)类型的变量,只能本身和子类可以进行访问3__foo:单双下划线表示的是私有类型的变量,只能允许这个类内本身进行访问



补充:python类的调用方法

1.类的内部调用:self.<方法名>(参数列表)

2.在类的外部调用:<实例名>.<方法名>(参数列表)

原创粉丝点击