Python学习(十四)——面向对象

来源:互联网 发布:达尔朗 知乎 编辑:程序博客网 时间:2024/06/09 22:42

面向对象

类的基本使用:

1 编写一个空类

# 空类class MyClass(object):    'abs'    pass

2 编写一个简单类

定义一个猫的类,默认为所有猫的叫声都是'Meow':

# 简单类class Cat(object):    def cry(self):        print 'Meow! Meow!'if __name__ == '__main__':    #实例化    cat = Cat()    cat.cry()

输出:

Meow! Meow!

3 为简单类添加一个属性
在猫类下添加一个catName方法,绑定一个name属性,在实例化的时候记录猫的名字:

class Cat(object):    "define a class"    def catName(self, name):        self.name = name    def cry(self):        print 'Meow! Meow! I am %s.'%self.nameif __name__ == '__main__': # 程序入口    cat = Cat()    cat.catName('Min')  # 设置实例属性    cat.cry()           # 设置实例行为

输出:

Meow! Meow! I am Min.

4 通过定义一个init方法,把一些必须绑定的属性强制填写进去;
这里认为所有的猫都该有个自己的名字,所以将name绑定到init方法上:

# __init__()举例class Cat(object):    "define a class"    def __init__(self, name):        self.name = name    def cry(self):        print 'Meow! Meow! I am %s.'%self.nameif __name__ == '__main__': # 程序入口    cat = Cat('Min')    cat.cry()           # 设置实例行为

5 添加类属性

类属性(class attributes):与实例无关,修改类属性需要使用类名.
可以由类中的方法来更新,也可以在主程序中更新.

class Cat(object):    "define a class"    counter = 0    def __init__(self, name):        self.name = name        Cat.counter += 1  # 注意:修改类属性需要使用类名.    def cry(self):        print 'Meow! Meow! I am %s.'%self.name        print Cat.counterif __name__ == '__main__': # 程序入口    for i in range(5):        cat = Cat('cat'+str(i+1))        cat.cry()           # 设置实例行为

输出:

Meow! Meow! I am cat1.1Meow! Meow! I am cat2.2Meow! Meow! I am cat3.3Meow! Meow! I am cat4.4Meow! Meow! I am cat5.5

6  类的继承

Python中类的继承可以单继承也可以多继承.

class Cat(object):    "define a class"    counter = 0    def __init__(self, name):        self.name = name        Cat.counter += 1  # 注意:修改类属性需要使用类名.    def cry(self):        print 'Meow! Meow! I am %s.'%self.name        print Cat.counter# 子类PersionCat继承了父类Catclass PersionCat(Cat):    def cry(self):    # 子类重写了父类中的cry()方法        print 'I am %s. and I am a Persion Cat' % self.nameif __name__ == '__main__': # 程序入口    for i in range(5):        cat = PersionCat('cat'+str(i+1))        cat.cry()           # 设置实例行为

输出:

I am cat1. and I am a Persion CatI am cat2. and I am a Persion CatI am cat3. and I am a Persion CatI am cat4. and I am a Persion CatI am cat5. and I am a Persion Cat

这里写图片描述

常规方法 类方法 静态方法
即常规方式, @classmethod修饰方式, @staticmethod修饰方式

常规方法绑定对象的实例;
类方法方法绑定对象
静态方法没有参数绑定

class A(object):    def f(self, x):        print("f(%s,%s)" % (self, x))        print('self:', self)    @classmethod    def classmethod_f(cls, x):        print("classmethod_f(%s,%s)" % (cls, x))        print('cls:', cls)    @staticmethod    def staticmethod_f(x):        print("staticmethod_f(%s)" % x)cat = A()print(cat.f(456))print(cat.classmethod_f(895656))print(cat.staticmethod_f(5))

输出:

f(<__main__.A object at 0x7f912d3ab6d0>,456)('self:', <__main__.A object at 0x7f912d3ab6d0>)Noneclassmethod_f(<class '__main__.A'>,895656)('cls:', <class '__main__.A'>)Nonestaticmethod_f(5)None
阅读全文
0 0