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)
强调对象精髓:
对象不仅包含一系列数据(自己读独有的+与其他对象共有的),还包含专门操作该数据的方法