码迷,mamicode.com
首页 > 编程语言 > 详细

Python面向对象

时间:2017-09-11 16:30:24      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:北京大学   logs   class   结束   nbsp   清华大学   访问   定义类   数据   

1.面向对象的程序设计

将一类具体事物的数据和动作整合到一起即面向对象设计

1.

sch = {
    ‘name‘: ‘清华大学‘,
    ‘tp‘: ‘公立学校‘,
    ‘addr‘: ‘北京‘
}
def shangke(x):
    
    print("%s 正在上课" % x[‘name‘])

def zhaosheng(y):

    print("%s%s 正在招生" % (y[‘tp‘], y[‘name‘]))
    
shangke(sch)
zhaosheng(sch)



清华大学 正在上课
公立学校清华大学 正在招生

2.

def school(name,tp,addr):

    def shangke(x):

        print("%s 正在上课" % x[‘name‘])

    def zhaosheng(y):

        print("%s%s 正在招生" % (y[‘tp‘], y[‘name‘]))

    sch = {
        ‘name‘: name,
        ‘tp‘: tp,
        ‘addr‘: addr,
        ‘shangke‘: shangke,
        ‘zhaosheng‘: zhaosheng
    }
    return sch

s1 = school(‘北京大学‘, ‘公立学校‘, ‘北京‘)
s1[‘shangke‘](s1)
s1[‘zhaosheng‘](s1)



北京大学 正在上课
公立学校北京大学 正在招生

3.

def school(name,tp,addr):

    def init(name,tp,addr):
        sch = {
            ‘name‘: name,
            ‘tp‘: tp,
            ‘addr‘: addr,
            ‘shangke‘: shangke,
            ‘zhaosheng‘: zhaosheng
        }
        return sch

    def shangke(x):

        print("%s 正在上课" % x[‘name‘])

    def zhaosheng(y):

        print("%s%s 正在招生" % (y[‘tp‘], y[‘name‘]))

    return init(name, tp, addr)

s1 = school(‘北京大学‘, ‘公立学校‘, ‘北京‘)
s1[‘shangke‘](s1)
s1[‘zhaosheng‘](s1)



北京大学 正在上课
公立学校北京大学 正在招生

 

2.面向对象编程

用定义类+实例/对象的方式去实现面向对象设计

1.

在python2中下面的类称为经典类(python3中都叫新式类 class People(object):pass):

class People:
    li = ‘老李‘

    def chuan_men():
        print(‘去隔壁串门‘)

a = People()  # 类的实例化

print(People)
print(People.li)  
People.chuan_men()
print(a)



<class ‘__main__.People‘>
老李
去隔壁串门
<__main__.People object at 0x7f7756c009e8>

2.

实例化的过程实际上就是调用 __init__(self)函数的运行,初始化构造函数。

class People:

    def __init__(self,name,age,gender):
        print(‘init开始‘)
        self.mingzi = name
        self.nianling = age
        self.xingbie = gender
        print(‘init结束‘)


p = People(‘隔壁老王‘, ‘45‘, ‘男‘)  # 实例化
print(p.__dict__)



init开始
init结束
{‘nianling‘: ‘45‘, ‘xingbie‘: ‘男‘, ‘mingzi‘: ‘隔壁老王‘}

3.

p的属性字典里面没有li,它会去所在类Penple的属性字典里面去找.p的属性字典里也没有函数属性,调用motou(self)实际上是调用了类People里面的motou(self)函数。self就是实例本身。

class People:
    li = ‘老李‘
    def __init__(self,name,age,gender):
        self.mingzi = name
        self.nianling = age
        self.xingbie = gender

    def motou(self):
        print(‘%s摸了一下你的头‘% self.mingzi)

p = People(‘隔壁老王‘, ‘45‘, ‘男‘)  # 实例化

print(p.__dict__)
print(p.li)
p.motou()
People.motou(p)


{‘xingbie‘: ‘男‘, ‘mingzi‘: ‘隔壁老王‘, ‘nianling‘: ‘45‘}
老李
隔壁老王摸了一下你的头
隔壁老王摸了一下你的头

实例可以访问类属性(作用域),类访问不了函数属性。实例只有数据属性,至于方法(函数属性)都去类里面去找(引用)。

-----

 

Python面向对象

标签:北京大学   logs   class   结束   nbsp   清华大学   访问   定义类   数据   

原文地址:http://www.cnblogs.com/lcgsmile/p/7505291.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!