面向对象

面向对象基础:

1、类与对象
对象:特征与技能的结合体
类:一系列对象相同的特征与技能的结合体
现象中的对象-》抽象--》现实世界中的类--》在程序中定义类---》调用类(实例化)---》程序中的对象

2、定义类:类中最常见的就是变量与函数的定义,但类中是可以有任意python代码的
 def func(): # 函数内的代码,在函数定义阶段不会运行
        x=1
        y=2
        print('===>')

    class People: # 类体内的代码,在类定义阶段就会立刻执行,会产生类的名称空间
        country="China"

        def run(self):
            print('----->',self)
  # 查看
    People.country
    People.run
    People.run(123)
    # 增加
    People.x=1
    # 修改
    People.country='CHINA'
    # 删除
    del People.x

 




#强调:
1、类中最常见的就是变量与函数的定义,并不是说一定要定义出变量与函数
 class People:
            def run(self):
                print('----->',self)

        obj1=People()
        obj2=People()
        obj3=People()
        obj1.run()

        obj1.country
        obj2.country
        obj3.country
2、程序中类并不完全等同于现实世界中的类,可以自己虚拟出来类

3、产生对象
    p1=People()
    p2=People()
    p3=People()

4、__init__方法
    强调:
        1、该方法内可以有任意的python代码
        2、一定不能有返回值

 



一、类的实例化:调用类产生对象的过程称为类的实例化,实例化的结果是一个对象,或称为一个实例
class People:
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

    def run(self):
        print('%s is running' %self.name)

 

重点!!!
实例化做了三件事
1、先产生一个空对象
2、自动触发类内部__init__函数的执行
3、将空对象,以及调用类括号内传入的参数,一同传给__init__,为对象定制独有的属性
obj=People('egon',18,'male') #People.__init__(obj,'egon',18,'male')

 



会产生对象的名称空间,如何查看
print(obj.__dict__)

二;对象的操作
print(obj.name) #obj.__dict__
obj.education='哈佛'
del obj.name
obj.age=19
print(obj.__dict__)   #查看对象的名称空间

 



#三:对象属性的查找顺序:先找对象自己的名称空间----》类的名称空间
class People:
    x=1
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

    def run(self): #self=obj
        print('%s is running' %self.name) #obj.name

obj=People('egon',18,'male') #People.__init__(obj,'egon',18,'male')
obj1=People('egon1',18,'male') #People.__init__(obj,'egon',18,'male')
obj2=People('egon2',18,'male') #People.__init__(obj,'egon',18,'male')

 



#1、类的数据属性:是给对象用的,而且直接共享给所有对象用的,内存地址都一样
print(People.x)
People.x=11111

print(id(People.x),People.x)
obj.x='obj================》'
print(id(obj.x),obj.x)
print(id(obj1.x),obj1.x)
print(id(obj2.x),obj2.x)

 


2、类的函数属性:也是给对象用,但是绑定给对象用的,绑定到不同的对象就是不同的
绑定方法,内存地址都不一样,但其实只想都是同一个功能
print(People.run) #<function People.run at 0x00000226E7C78A60>
People.run(123123)
People.run(obj)

print(obj.run)
print(obj1.run)
print(obj2.run)

 


四:绑定方法的特殊之处:
1、 绑定给谁就应该由谁来调用,
2、谁来调用就会把谁当做第一个参数传入
重点!!!!
类内部定义的函数,类可以使用,但类来用的时候就是一个普通函数,普通函数有几个参就传几个参数
类内部定义的函数,其实是给对象使用的,而且是绑定给对象用,绑定给不同的对象就是不同的绑定方法

 

class People:
    x=1
    def __init__(self,name,age,sex):      #类的初始化
        self.name=name
        self.age=age
        self.sex=sex

    def run(self): #self=obj
        print('%s is running' %self.name) #obj.name

    def f1():
        print('from f1')

    def f2(self):
        pass

obj=People('egon',18,'male') #People.__init__(obj,'egon',18,'male')
obj1=People('egon1',18,'male') #People.__init__(obj,'egon',18,'male')
obj2=People('egon2',18,'male') #People.__init__(obj,'egon',18,'male')

obj.run()
obj1.run()
obj2.run()

print(People.f1)
People.f1()
print(obj.f1)
obj.f1() #People.f1(obj)


五:一切皆对象:在python3中统一了类与类型的概念,类就是类型
l=list([1,2,3])
print(type(l))

print(type(obj))

l.append(4)

 

posted @ 2018-04-12 14:41  鲁之敬  阅读(68)  评论(0编辑  收藏  举报