Python面向对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python面向对象相关的知识,希望对你有一定的参考价值。

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面向对象的主要内容,如果未能解决你的问题,请参考以下文章

python之路之前没搞明白4面向对象(封装)

Python面向对象学习之八,装饰器

python:第二部分:面向对象:面向对象object orinted

Python 面向对象

面向面试编程代码片段之GC

面向对象编程其实很简单——Python 面向对象(初级篇)