三大编程范式:面向对象编程,面向对象编程,函数式编程。
类:把一类事物的相同特征和动作整合到一起就是类。抽象概念。
对象:就是基于类而创建的一个具体事物。
实例化:由类生产对象的过程就是实例化。
比如,类定义了一些特征和动作,那么98K是type 狙击枪,feature杀伤力大,装八倍镜,m24也具有这些特征,除了name不同。就可以将栓狙的共性结合在一起,特征也结合在一起。把他们全部包起来装好。
所以,面向对象设计:将一类具体事物的动作和数据整合在一起。
面向对象编程:用定义类+实例的方式去实现面向对象的设计。
#self其实就是一个字典形式 #声明类和函数相似 #class 类名: (后面可以不要括号,类名首字母大写) # '类的文档字符串' # '类体' #实例化 # d1 = Data() #括号是运行类,实例化,还没传入参数 #实例化的含义: #属性 #实例是由类产生的,那么实例就应该得到类的属性。 #那么,类一般包含哪些属性呢? #数据属性:就相当于是特征,比如名字type,这些都是通过变量获得的,所以是变量。 #函数属性:函数,在类中就是方法。 #类和对象都用点来访问自己的属性。 这句话背住。 #print(dir(class)) 查看数据属性名称和函数属性名称,还有内置属性名称。 #print(class.__dir__) #查看类的属性字典,可以看到数据属性和函数属性都存在这个字典中 #在这个字典中,key就是属性名,value就是属性值。 #那么,class.funcname() 本质就是去函数字典中找东西。 #对象相关 #实例化:由类产生对象过程。 #p1 = class(*args) 这个过程是实例化,p1就是实例。记得括号。 #在类中,必须要有一个初始化函数,去定制每一个对象的属性。 __init__。 #(这是啥意思?就是98k,m24是不同的东西,我去向狙击枪这个类实例化,获得98k,m24的对象,名称不同,威力不同, #那么传入的参数就不同。这些参数需要再类中初始化,你才能调用属性。比如传入98k,然后初始化得到名称,这个名称 #在类的方法中获得它的威力和弹道,这样肯定需要初始化,不初始化类的方法就搞不好。__init__(实例的参数) #在类中,定义成__init__会自动return成数值属性。 #__init__必须先有一个self属性名字,然后才是传入的参数。比如,self.name 就是给self传入了name属性,这个就是数值属性, #name属性封装到self中,然后默认return self字典,name变成一个数值属性,name:value。 #实例化过程本质就是调用init. print(p1.__dict__)。所以,实例就是init。 #调用 print(p1.name) 因为name是数值属性,可以通过点调用,name属性对应了一个value,就会显示name对应的值。 #所以,如果调用class.func,如果后面没括号,就是调用这个函数的内存地址,想获得值,就要加括号和参数执行它。 #实例没有函数属性,但是可以从类中调用,因为作用域的关系,它会往init外面去找,找类那一层。 #怎么调?p1.function() 从实例调方法,相当于class.func(p1) 把p1传给了function。 #self就代表实例自己本身。