python之对象产生,属性(定义的值)的查找原则,对象绑定关系

例1:                                 通过外部定义一个函数也可以传值进去

class OldboyStudent:
    school='oldboy'


    def choose_course(self):
        print('is choosing course')


stu1=OldboyStudent()
stu2=OldboyStudent()
stu3=OldboyStudent()



def init(obj,x,y,z):               # 对象也是个名称空间,名称空间是用来存放对象自己独有是名字/属性 定义一个函数
obj.name=x                       # 定义个函数,传入个对象以及属性,把属性直接增加对象名称空间里
obj.age=y
obj.sex=z


init(stu1,'耗哥',18,'male')
# stu1.name='耗哥'
# stu1.age=18
# stu1.sex='male'



# stu2.name='猪哥'
# stu2.age=17
# stu2.sex='male'
init(stu2,'诸哥',17,'male')


# stu3.name='帅翔'
# stu3.age=19
# stu3.sex='female'
init(stu3,'帅翔',19,'female')


print(stu1.__dict__)
print(stu2.__dict__)
print(stu3.__dict__)

'''

 

class OldboyStudent:

        school='lodboy'

        def __init__(obj,x,y,z):                               #:__init__会在调用类时自动触发

            obj.name=x                                         #stu1.name='浩哥'

            obj.age=y                                            #stu1.age=18

            obj.sex=z                                            #stu1.sex='male'

      def choose_course(self):

            print('is choosing course')

   __init__方法:用于在调用类时/实例化时自动触发,为对象初始化自己独有的属性

一.调用类时发生两个事情:

    1.创造一个空对象stu1

    2.自动触发类中__init__功能的执行,将stu1以及调用类括号内的参数一同传入,如下:

    stu1=OldboyStudent(‘浩哥’,18,‘male’)

    #OldboyStudent.__init__(‘stu1’,‘浩哥’,‘18’,‘male’)

    stu2=OldboyStudent(‘猪哥’,17,‘male’)

    stu3=OldboyStudent(‘帅翔’,19,‘famale’)

2.对象的本质就是一个名称空间而已,对象名称空间是用存放对象自己独有的名字/属性,

    而类中存放是对象们共有是属性   (属性=值)

print(stu1.__dict__)                    #查看stu1名称空间里传入的值/属性  
print(stu2.__dict__)

print(stu3.__dict__)

 

二.属性的查找原则

    类用两种属性:数据属性和函数属性

    1.类的数据属性是所有对象共享的

    2.类的函数属性是绑定给对象用的

    先从对象自己的名称空间(容器:存放数据)里找,没有则去类中找,如果类和没有则报错

三.绑定关系

    类:名称空间中定义的数据属性和函数属性都是共享给所有对象用的

    对象:的名称空间中定义的只要数据属性,而且是对象自己所独有是数据属性

绑定方法:

        1.类中定义的函数是类的函数属性,类可以使用,但使用的就是一个普通的函数而已,意味着需要完全遵循函数的参数规则,该传几个值就传几个值

        2.类中定义的函数是共享给所有对象的,对象可以使用,而且是绑定给对象用

            绑定给谁,就应该由谁来调用,谁调用就会将自己当做第一个参数传入

 

补充:类中定义的函数。类可以使用,但其实类定义的函数大多情况下都是绑定给对象用的,

        所以在类中定义的函数都应该自带一个参数self

总结:

        对象是一个高度整合的产物,整合数据与专门操作该数据的方法(绑定方法)

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

     print(l)

强调对象精髓:

    对象不仅包含一系列数据(自己读独有的+与其他对象共有的),还包含专门操作该数据的方法

posted @ 2018-06-27 14:16  Marcki  阅读(377)  评论(0编辑  收藏  举报