类有两种属性:数据属性和函数属性。python
一、类的数据属性是全部对象共享的编程
#类的数据属性是全部对象共享的,id都同样 print(id(OldboyStudent.school)) print(id(s1.school)) #4377347328 print(id(s2.school)) #4377347328 print(id(s3.school)) #4377347328
二、类的函数属性是绑定给对象用的,称为绑定到对象的方法app
#类的函数属性是绑定给对象使用的,obj.method称为绑定方法,内存地址都不同 print(OldboyStudent.learn) #<function OldboyStudent.learn at 0x1021329d8> print(s1.learn) #<bound method OldboyStudent.learn of <__main__.OldboyStudent object at 0x1021466d8>> print(s2.learn) #<bound method OldboyStudent.learn of <__main__.OldboyStudent object at 0x102146710>> print(s3.learn) #<bound method OldboyStudent.learn of <__main__.OldboyStudent object at 0x102146748>> #ps:id是python的实现机制,并不能真实反映内存地址,若是有内存地址,仍是之内存地址为准
在obj.name会先从obj本身的名称空间里找name,找不到则去类中找,类也找不到就找父类...最后都找不到就抛出异常。函数
定义类并实例化出三个对象ui
class OldboyStudent: school='oldboy' def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex def learn(self): print('%s is learning' %self.name) #新增self.name def eat(self): print('%s is eating' %self.name) def sleep(self): print('%s is sleeping' %self.name) s1=OldboyStudent('李坦克','男',18) s2=OldboyStudent('王大炮','女',38) s3=OldboyStudent('牛榴弹','男',78)
类中定义的函数(没有被任何装饰器装饰的)是类的函数属性,类可使用,但必须遵循函数的参数规则,有几个参数须要传几个参数code
OldboyStudent.learn(s1) #李坦克 is learning OldboyStudent.learn(s2) #王大炮 is learning OldboyStudent.learn(s3) #牛榴弹 is learning
类中定义的函数(没有被任何装饰器装饰的),其实主要是给对象使用的,并且是绑定到对象的,虽然全部对象指向的都是相同的功能,可是绑定到不一样的对象就是不一样的绑定方法对象
强调:绑定到对象的方法的特殊之处在于,绑定给谁就由谁来调用,谁来调用,就会将‘谁’自己当作第一个参数传给方法,即自动传值(方法__init__
也是同样的道理)。内存
python中一切皆为对象,且python3中类与类型是一个概念,类型就是类。it
#类型dict就是类dict >>> list <class 'list'> #实例化的到3个对象l1,l2,l3 >>> l1=list() >>> l2=list() >>> l3=list() #三个对象都有绑定方法append,是相同的功能,但内存地址不一样 >>> l1.append <built-in method append of list object at 0x10b482b48> >>> l2.append <built-in method append of list object at 0x10b482b88> >>> l3.append <built-in method append of list object at 0x10b482bc8> #操做绑定方法l1.append(3),就是在往l1添加3,绝对不会将3添加到l2或l3 >>> l1.append(3) >>> l1 [3] >>> l2 [] >>> l3 [] #调用类list.append(l3,111)等同于l3.append(111) >>> list.append(l3,111) #l3.append(111) >>> l3 [111]