了解了类,后面必须要了解方法。
在编程当作最常见的就是实例化类,然后通过实例化来调用方法。总的可以看出来:
1)方法是定义在类里面的函数,这个函数默认第一个参数是self
2)调用方法,一般必须把类实例化后,再来调用方法,调用方法的时候后面必须加括号。
通过实例化调用方法,一般我们看着把方法绑定在实例上。
1,绑定方法和非绑定方法
绑定方法,我们一般这样用
>>> class Wife(object):
def life(self):
print "老婆去做饭"
如果想要使用Wife.life()--通知老婆去做饭,就必须:
>>> w = Wife() #实例化,实现了方法和实例的绑定
>>> w.life() #调用该方法
老婆去做饭
处理
非绑定方法:
#! /usr/bin/env python
# coding=utf-8
__metaclass__ = type
class Person:
def __init__(self):
self.height = 150
def about(self,name):
print "{} is about {}".format(name,self.height)
class HotGirl(Person):
def __init__(self):
super
(HotGirl,self).__init__() #重写之后调用父类初始化方法
self.breast = 90
def about(self,name):
print "{} is a hot girl,she is about {},and her break is {}".format(name,self.height,self.breast)
super
(HotGirl,self).about("zhangsan") #重写之后调用父类方法
if __name__ == "__main__":
k = HotGirl()
k.about("kity")
在子类HotGirl中,因为重写了父类的__init__方法,如果要调用父类该方法,不得不使用
super(HotGirl,self).__init__()调用父类中因为子类方法重写而被遮蔽的同名方法。
在子类中,父类的方法就是非绑定方法,因为在子类中,没有建立父类的实例,却要用父类的方法。
2,类方法和静态方法
类中的方法第一个参数必须是self,并且如果要调用类的方法,要通过类的实例,即方法绑定实例后才能由实例调用。如果不绑定,一般在继承关系的类之间,可以用super函数等方法调用。
#! /usr/bin/env python
# coding=utf-8
__metaclass__ = type
class StaticMethod:
@staticmethod
#@staticmethod表示下面的方法是静态方法
def staticTest():
print "这是静态方法"
class ClassMethod:
@classmethod
#@classmethod表示下面的方法是类方法
def classTest(
cls
):
print "这是个类方法"
if __name__ == "__main__":
s = StaticMethod()
s.staticTest()
StaticMethod.staticTest()
c = ClassMethod() #实例化
c.classTest() #实例调用静态方法
ClassMethod.classTest() #通过类来调用静态方法
需要注意的静态方法是文件名后面的括号内
没有self,这和前面定义的类中的方法不同,也正是因为这个不同,才给它另外取了一个名字叫作
静态方法。
类方法,同样也具有一般方法的特点,区别也在参数上。类方法的参数也没有self,但是必须有
cls这个参数。在类方法中,能够访问类属性,但是不能访问实例属性
classmethod 和普通函数调用时都有默认参数传入,只有staticmethod调用时没有任何默认参数传入
两种方法都可以通过实例调用,即绑定实例。也可以通过类来调用
具体用途可以参考知乎:
https://www.zhihu.com/question/20021164