python-33 面向对象:类和对象之一

类:把一类事物相同的特征和动作整合到一起,就是类,类是抽象的概念。

类的本质:一种数据结构

对象:基于类产生的一个具体事物,具有类的动作和特征,只包含自己的特征数据。

实例化:就是类名(),也就是初始化__init__(),它的作用就是产生一个字典,初始化结果就是返回一个实例对象。

对象.属性名:先在自己的字典里查找,如果没有,再去类的字典里查找。即有其作用域。

实例通过引用的方法去访问类的函数属性,这样节约资源

#py2中类分经典类和新式类,class A:经典类,class B(object)新式类,py3中全是新式类
country='China'
population=20000
class School: #类:数据属性+方法属性
    proper='公立'  #数据属性,又叫类的静态属性
    country='American'
    ls=[1,2,3]
    def __init__(self,name,add,tel): #只包含对象的数据属性,在对象的__dict__中
        self.name=name,
        self.add=add,
        self.tel=tel
        print('--->',country)#返回:---> China,表示查找变量country,全局找,返顺'China',s.country或School.country,则是查属性'American'

    def test(self): #类的方法属性
        print('%s正在举行考试。。。'%self.name)
    def enrollment(self):
        print('%s正在招生。。。'%self.name)
s1=School('中国科技大学','合肥','05511114556')
s2=School('清华大学','北京','010111222')
s1.test()
s2.enrollment()
print(School)#<class '__main__.School'>,__main__下的School类
print(s1)#<__main__.School object at 0x004EFA50>,__main__下School类的对象地址
print(School.__dict__) #'__module__': '__main__', 'proper': '公立', '__init__': <function School.__init__ at 0x015BC6A8>, 'test': <function School.test at 0x01C9E8A0>, 'enrollment': <function School.enrollment at 0x01C9E858>, '__dict__': <attribute '__dict__' of 'School' objects>, '__weakref__': <attribute '__weakref__' of 'School' objects>, '__doc__': None}
#School.__dict__,查看类的属性字典,包含类的数据属性和方法属性
print(s1.__dict__)#{'name': ('中国科技大学',), 'add': ('合肥',), 'tel': '05511114556'},仅包含实例化对象的数据属性

#=类属性:增删查改===================
s1.order='NO1'
School.area=500#增加
print(s1.order,School.area)#NO1 500
s1.area=600 #更改
print(s1.area,School.area)#600 500,查看
s2.ls=['a','b']#这是给s2增一个ls的列表属性,不影响School的ls列表
print(School.ls)#[1, 2, 3]
s1.ls.append('a')#这是引用了School.ls列表,给School.ls列表增加一个元素'a',s1中没有增加列表
print(s1.__dict__)#没有ls属性,{'name': ('中国科技大学',), 'add': ('合肥',), 'tel': '05511114556', 'order': 'NO1', 'area': 600}
print(School.ls)#School.ls列表改变,[1, 2, 3, 'a']

del s1.order#删除
print(s1.population)#报错,仅管有个全局变量population=20000,类的查找顺序是:实例字典,再到类字典,没有就报错
#注:print('--->',country),是在查找变量country,而s1.population表示查找s1对象属性'population',是两回事,查属性在字典里找,查变量在全局找
View Code

 

posted @ 2019-01-16 17:05  优雅的代码  阅读(162)  评论(0编辑  收藏  举报