类 对象

类:抽象的 把一类具有共同属性和特征的事物集合到一起就是类

对象:具体的 类里面具体的某一个事物

面向对象设计:就是把一类具体事物的属性和特征集合到一起

面向对象编程:用定义类 + 实例/对象的方法去实现面向对象的设计

 

初识:

def school(name):
    def enrollment(name):
        print('%s 正在招生' %name['name'])
    school_dic = {'name':name, 'enrollment': enrollment}
    return school_dic

s1 = school('xdf')
s1['enrollment'](s1)

  

 

进化:

class School:  # 用class定义,类名首字母大写
    tag = 1
    def __init__(self, name):   # __init__内置方法,作用是在实例化时,自动生成实例的属性字典并返回,相当于school_dic
        self.Name = name       # school_dic = {’name‘:name,  ’enrollment':enrollment}
                              # return school_dic
    def enrollment(self):
        print('%s 正在招生' % self.Name)
    
s1 = School('xdf')  # 实例化,实际就是调用类的init方法 ,生成了一个实例的属性字典 {‘name’:‘xdf}
# 实例只有数据属性,所以实例的属性字典里面只包括了name
    
s1.enrollment()  # s1['enrollent'](s1) 实际是完成了这一步的工作,类会自动将实例本身作为参数传给self
    
# 虽然实例属性字典里面没有函数属性,但是可以调用类的函数属性enrollment,这是因为作用域的原因,当实例不能从自己的字典中查找到的时候,
#会向上到类的属性字典查找,如果也没有则会报错,不会再向上查找了 当然这种作用域的关系只存在用.的方式调用的时候

 

 self是类帮忙自动传的一个参数,不需要程序员自己去传,实际就是把实例本身作为参数穿过去,也就是实例的属性字典 

实例化的过程 ,先找到init方法 生成一个实例的属性字典  

总结:类 和 实例都有自己的属性字典,类的属性字典包含了 数据属性和函数属性,实例的字典只有数据属性,这是因为函数属性不是给某一个实例的

如果实例自己有函数属性,这个属性就是一个私有的属性,不能被其他实例调用,

在用 ’.‘的方式 调用实例的属性时,遵循先从自己的字典中找,如果没有就向上到类的属性字典中找,如果也没有就终止,这也就是为什么实例能调用类的方法。

print(School.__dict__)   可以查看类的属性字典,其中就包含了类的数据属性和函数属性

{'__module__': '__main__','tag': 1, '__init__': <function School.__init__ at 0x0000014E1F23D598>, 'enrollment': <function School.enrollment at 0x0000014E1F23D488>, '__dict__': <attribute '__dict__' of 'School' objects>, '__weakref__': <attribute '__weakref__' of 'School' objects>, '__doc__': None}

 

print(s1.__dict__)   可以查看实例的属性字典,包含了实例的数据属性

{'Name': 'xdf'}

转载于:https://www.cnblogs.com/liqinsan/p/11526270.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值