一.类的定义--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