第九章 Python之面向对象

面向对象编程

  面向对象编程是一种程序设计思想,它把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数

  面向过程的程序设计把计算机程序视为一系列命令的集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数来降低系统的复杂度

  而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递

类和实例

  类是抽象的模板,而实例是根据类创建出来的一个个具体的“对象”

#定义类
#类体代码在类的定义阶段就会立刻执行
class Student:          #class后面紧接着是类名,类名通常是大写开头的单词
    school='oldgirl'

    def learn(self):
        print('is learning')

    def choose_course(self):
        print('choose course')

    print('===run')
#查看属性
print(Student.__dict__)  #查看类的名称空间
print(Student.school)    #访问类的数据属性,等同于Student.__dic__['school']
print(Student.learn)     #访问类的函数属性
#增加属性
Student.country='China'  #等同于Student.__dic__['country']='China'
print(Student.country)
#修改属性
print(Student.school='Oldgirl')
#删除属性
del Student.country
class Student:
    school='oldgirl'
#__init__方法是在产生对象后才会执行,只用来为对象进行初始化操作,把name,age等属性绑上去,且不能有返回值
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def learn(self):
        print('is learning')

    def choose_course(self):
        print('choose course')

#调用类即实例化(首先得到一个返回值即对象,该对象是一个空对象stu1;
#其次执行Student__init__(stu1,'lary',18))
stu1=Student('lary',18) #stu1.name='lary',stu1.age=18 print(stu1.name,stu1.age)

属性查找与绑定方法

   查找对象的属性顺序是:对象自己的__dict__,再找类的__dict__

  类的数据属性是所有对象共享,类的函数属性是绑定给对象用的

class Student:
    school='oldgirl'
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def learn(self):
        print('%s is learning'%self.name)

    def choose_course(self):
        print('choose course')

stu1=Student('lary',18)
stu2=Student('egon',20)
#类的数据属性是所有对象共享的
print(id(stu1.school),id(stu2.school))
#类的函数属性是绑定给对象用的
print(stu1.learn,stu2.learn)
#<bound method Student.learn of <__main__.Student object at 0x0532F1D0>>
#绑定类中定义的函数是绑定给对象用的,不同的对象就是不同的绑定方法
#绑定给谁,就由谁来调用,谁调用,就将该对象当作第一个参数传给方法,即自动传值
stu1.learn()        #stu1.learn=Student.learn(stu1)
Student.learn(stu1) #类调用自身的方法需给位置参数传值
#绑定到对象的方法这种自动传值的特征,决定了在类中定义的函数都要写一个默认参数(习惯用self,其他名字也可以)

类即类型

  python中一切皆对象,且python3中类与类型是一个概念,类即类型

#类即类型
class Teacher:

    school='oldboy'
    count=0

    def __init__(self,name,age,sex):
        self.Name=name
        self.Age=age
        self.Sex=sex
        Teacher.count+=1

    def teach(self):
        print('%s teaching'%self.Name)

    def course(self):
        print('%s teach course'%self.Name)

teacher1=Teacher('egon',18,'male')
print(type(teacher1))

p=[1,2,3,4]  #p=list([1,2,3,4])
print(type(p))
p.append(5)  #list.append(p,5)
print(p)

isinstance 和issubclass

#isinstance(obj,cls)检查是否obj是否是类 cls 的对象
class Foo(object):
    pass

obj = Foo()
print(isinstance(obj,Foo))

 

#issubclass(sub, super)检查sub类是否是 super 类的派生类
class Foo(object):
    pass

class Bar(Foo):
    pass

print(issubclass(Bar,Foo))

 

posted @ 2018-01-18 15:58  日新其德止于至善  阅读(205)  评论(0)    收藏  举报