zoukankan      html  css  js  c++  java
  • 面向对象编程基础(进阶4)

    转载请标明出处:
    http://www.cnblogs.com/why168888/p/6416148.html

    本文出自:【Edwin博客园】


    面向对象编程基础(进阶4)

    1. python之面向对象编程

    万物皆对象,因学过Java面向对象编程思想,Python也一样,所以简单写下这节

    什么是面向对象编程

    • 面向对象编程是一种程序设计范式
    • 把程序看做不同对象的相互调用
    • 对现在世界建立对象模型

    面向对象编程的基本思想

    • 类和实列
    • 类用于定义抽象类型
    • 实例根据类的定义被创建出来

    2. python之定义类并创建实例

    # -*- coding:utf-8 -*-
    class Person(object):
        pass
    
    xiaoming = Person()
    xiaohong = Person()
    print xiaoming
    print xiaohong
    print xiaoming == xiaohong
    

    3. python中创建实例属性

    class Person(object):
        pass
    p1 = Person()
    p1.name = 'Bart'
    
    p2 = Person()
    p2.name = 'Adam'
    
    p3 = Person()
    p3.name = 'Lisa'
    
    L1 = [p1, p2, p3]
    L2 = sorted(L1, lambda p1, p2: cmp(p1.name, p2.name))
    
    print L2[0].name
    print L2[1].name
    print L2[2].name
    

    4. python中初始化实例属性

    在定义 Person 类时,可以为Person类添加一个特殊的__init__()方法,当创建实例时,init()方法被自动调用,我们就能在此为每个实例都统一加上以下属性

    class Person(object):
        def __init__(self, name, gender, birth, **kw):
            self.name = name
            self.gender = gender
            self.birth = birth
            for k, v in kw.iteritems():
                setattr(self, k, v)
    xiaoming = Person('Xiao Ming', 'Male', '1990-1-1', job='Student')
    print xiaoming.name
    print xiaoming.job
    

    5. python中访问限制

    Python对属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头(__),该属性就无法被外部访问。

    class Person(object):
        def __init__(self, name, score):
            self.name = name
            self.__score = score
    
    p = Person('Bob', 59)
    
    print p.name
    print p.__score
    

    6. python中创建类属性

    每个实例各自拥有,互相独立,而类属性有且只有一份。

    class Person(object):
        count = 0
        def __init__(self, name):
            Person.count = Person.count + 1
            self.name = name
    p1 = Person('Bob')
    print Person.count # 1
    
    p2 = Person('Alice')
    print Person.count # 2
    
    p3 = Person('Tim')
    print Person.count # 3
    

    7. python中类属性和实例属性名字冲突怎么办

    class Person(object):
        __count = 0
        def __init__(self, name):
            Person.__count = Person.__count + 1
            self.name = name
            print Person.__count
    
    p1 = Person('Bob')
    p2 = Person('Alice')
    
    print Person.__count
    

    8. python中定义实例方法

    class Person(object):
    
        def __init__(self, name, score):
            self.__name = name
            self.__score = score
    
        def get_grade(self):
            if self.__score >= 80:
                return 'A'
            if self.__score >= 60:
                return 'B'
            return 'C'
    
    p1 = Person('Bob', 90)
    p2 = Person('Alice', 65)
    p3 = Person('Tim', 48)
    
    print p1.get_grade()
    print p2.get_grade()
    print p3.get_grade()
    

    9. python中方法也是属性

    class Person(object):
    
        def __init__(self, name, score):
            self.name = name
            self.score = score
            self.get_grade = lambda: 'A'
    
    p1 = Person('Bob', 90)
    print p1.get_grade
    print p1.get_grade()
    

    10. python中定义类方法

    和属性类似,方法也分实例方法和类方法。

    class Person(object):
        __count = 0
        @classmethod
        def how_many(cls):
            return cls.__count
        def __init__(self, name):
            self.name = name
            Person.__count = Person.__count + 1
    
    print Person.how_many()
    p1 = Person('Bob')
    print Person.how_many()
    
  • 相关阅读:
    玩家移动
    人物上线(激活玩家之后)
    map 玩家上线
    无锁的环形队列
    随笔
    std::bind
    如何查找文件中的schema约束
    myeclipse便捷导包方式
    21 求1+2!+3!+...+20!的和
    20 求出这个数列的前 20 项之和
  • 原文地址:https://www.cnblogs.com/why168888/p/6416148.html
Copyright © 2011-2022 走看看