一、静态方法:
比如现在我有一个工具类,每次调用的时候我仅想调用里面的方法!如果每次调用这个类都需要实例化,的话比如成千上完的人去掉用,都给他进行实例化,那么是不是很占用内存?
有什么办法调用的时候不需要实例化呢?直接调用类中的方法呢?静态方法
class Tools(object):
@staticmethod #设置为静态方法!装饰器
def hatchet():
print "axe someting....."
@staticmethod #设置为静态方法!装饰器
def saw():
print "saw someting....."
Tools.hatchet() #这里调用的时候就不用实例化了!(工具类)
二、私有属性:
#!/usr/bin/env python #-*- coding:utf-8 -*- class Game(object): def __init__(self): self.__name = "shuaige"# 定义私有属性 self.age = 19 # 普通属性定义 gamer1 = Game() # 正常输出 print gamer1.age # 提示找不到属性 print gamer1.__name '''
结果:
Traceback (most recent call last):
File "E://GitHub/homework/tianshuai/privately-owned.py", line 16, in <module>
print gamer1.__name
AttributeError: 'Game' object has no attribute '__name'
'''
class Game(object):
def __init__(self):
self.__name = "shuaige"# 定义私有属性
self.age = 19 # 普通属性定义
gamer1 = Game()
# 正常输出
print gamer1.age
gamer1.__name = 'shuaige' #只能这么调用私有属性
print gamer1.__name
#并且要注意,就算类继承也是无法调用私有属性的!
#! encoding=UTF-8
class Game(object):
def __init__(self):
self.__name = "shuaige"# 定义私有属性
self.age = 19 # 普通属性定义
class Newgame(Game):
def say_name(self):
print self.__name
gamer2 = Newgame()
gamer2.say_name()
#总结:私有属性,仅是类中自己调用的,外面是无法调用他的!
三、继承
经过小月月和他女朋友的努力他们有了自己的孩子,然后要为孩子创建一个类,想想以后他们还会有很多孩子,我们想象一下孩子的类和人这个类是不是有很多相同的地方?
比如睡觉、吃、年龄?难道在需要重新写下类吗?不用在python中有个继承的方法!
#!/usrbin/env python #-*- coding:utf-8 -*- class Person(object): #定义一个类Person(object) 这个object是必要参数,语法规定 def __init__(self,name,age): self.name = name #这里就相当于grilfrend1.name = alex grilfrend2.name = eric self.age = age def eat(self): print "The Girl frend %s is eating...." % self.name def sleep(self): print "The Girl frend %s is sleeping...." % self.name def age_now(self): print "%s ,I am %d year old" % (self.name,self.age) class Child(Person): def cute(self): print "TH child %s is very cute" % self.name #"这里看下在在初始函数里没有指定但是我还是可以调用父类中的初始化参数" child1 = Child('xiaoxiaoyueyue',2) #实例化 child1.eat() #这里看下,我在Child的类中并没有指定吃的方法,但是我继承了父类中的方法所以就不需要在写一次了
四、抽象类和方法
#!/usr/bin/env python
#-*- coding:utf-8 -*- from abc import ABCMeta,abstractmethod #调用抽象方法 '''
现在我有这么一个需求,我现在是公司的CTO,我站在架构的角度,我要写一个大型程序。我分了好模块,我对每个模块进行了类的划分
每个类了,都规定了都具备那些方法,都定义出来了,我只是把方法定义出来了,方法里的具体实现还需要我去具体实现吗?直接让下面的人
去做就可以了,具体的函数让他们去实现。
''' class Car(object): def __init__(self,color,brand): self.color = color self.brand = brand def start(self): print "staring the car" ###################################################################################################################### '''
看上面的类,手下的人写一个BMW如果要使用我写的类,有办法强制让他按照我写的方法写吗?比如我有个start发放,你有办法控制吗?
不可以的!
''' class Bmw(Car): #继承父类 def __init__(self,color,brand): self.color = color self.brand = brand def notstart(self): print "you cant contrl myself" car1 = Bmw('rad','bmw') car1.notstart() '''
这里可以看到,我父类定义的东西,员工在调用的时候没有强制的约定我可以实现父类的start也可以不实现?但是现在要求,CTO定义的方法
其他人在调用的时候必须实现这个方法怎么办?
使用抽象类和抽象方法!什么意思,就是我定义好了这个类和方法,方法里是可以没有内容的。
看下面的代码,我在抽象方法里,可以没有内容,但是我定义了,其他人在调用我的时候必须实现这个方法
'''
总结:抽象类和抽象方法就是为了实现咱们上述所说的要求,我在上层模板中定义了一个模板,下面的人在调用的时候必须实现,我上层定义的抽象方法!
更多请参考:http://www.cnblogs.com/wupeiqi