一.类的定义--class关键字
类的组成包括成员变量(name,age)和成员函数(who)
class User: name=‘zhzhgo‘ age=25 def who(self): print "I‘m "+self.name
对象的创建
u=User() u.age u.who()
构造方法和析构方法
__init__() 对象生成的时候执行构造方法
__def__() 对象销毁的时候执行析构方法
二.类的继承--声明类的时候括号中写要继承的父类
类的继承衍生出类子类,子类可以继承或重写父类的方法,子类可以自定义新的方法或者成员变量,比如学生类可以继承用户类
class User(object): name=‘‘ age=‘‘ def __init__(self,name,age): self.name=name self.age=age def who(self): print "My name is "+self.name+",I‘m "+str(self.age)+" years old." class Student(User): height=‘‘ def __init__(self,name,age,height): User.__init__(self,name,age) self.height=height def who(self): User.who(self) #super(Student,self).who() print "My height is "+ str(self.height) Student("zhzhgo",25,168).who()
>>>
My name is zhzhgo,I‘m 25 years old.
My height is 168
>>>
继承嵌套,即多重继承
class 类名(父类1,父类2,....,父类n) <语句1>
需要注意括号中父类的顺序,如果父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索,即方法在子类中未找到时,从左到右查找父类中是否包含该方法
三.实例方法、类方法、静态方法
实例方法,类方法,静态方法都可以通过实例或者类调用,只不过实例方法通过类调用时需要传递实例的引用(python 3可以传递任意对象,其他版本会报错)
实例方法针对的是实例,第一个参数是self,普通对象方法至少需要一个self参数,代表类对象实例;类方法针对的是类,@classmethod 它表示接下来的是一个类方法,类方法的第一个参数cls,它们都可以继承和重新定义;静态方法用于作为程序中的共享资源,直接通过类去调用,不用实例化对象,不需要self参数,可以认为是全局函数,@staticmethod 它表示接下来的是一个静态方法
class Test1(object): def test1(self): #定义了实例方法 print("object") @classmethod def test2(cls): #定义了类方法 print("class") @staticmethod def test3(): #定义了静态方法 print("static") f1=Test1() #f1.test1(); #通过实例调用 Test1.test1(f1) #直接通过类的方式调用,但是需要自己传递实例引用 Test1.test2() print "--------------------" #如果Test1有子类,并且子类覆盖了这个类方法,最终会调用子类的方法并传递子类的类对象 class Test2(Test1): @classmethod def test2(cls): print(cls) print("test2 object") f2=Test2() f2.test2() print "--------------------" f1.test3(); #使用实例调用 Test1.test3(); #直接静态方式调用
>>>
object
class
--------------------
<class ‘__main__.Test2‘>
test2 object
--------------------
static
static
>>>
本文出自 “今日的努力,明日的成功!” 博客,请务必保留此出处http://zhzhgo.blog.51cto.com/10497096/1677290
原文地址:http://zhzhgo.blog.51cto.com/10497096/1677290