类:模板
对象:模板造出来的玩意
封装:
1、防止数据被随意修改
2、使外部程序不需要关注对象内部的构造,只需要通过此对象对外提供的接口进行直接访问即可。
继承:通过父类->子类的方式以最小代码量的方式实现不同角色的共同点和不同点
多态:一个接口,多种实现
代码举例:
#!/usr/bin/env python # -*- coding: utf-8 -*- class Dog(object): def __init__(self,name): #构造函数=构造方法=初始化方法 self.name = name def sayhi(self): #类的方法 print("hello, I am a dog. My name is ", self.name) def hehe(self,food): print("hello, %s.\t There is some %s" % (self.name,food)) d = Dog('wangcai') #实例化后产生的对象叫实例 d.sayhi() d2 = Dog("erha") d2.hehe('apple')
类-->实例化-->实例对象
__init__:构造函数
self.name = name #属性,或成员变量
def sayhi() #方法,或动态属性
公有属性:在类中定义的属性,所有属于这个类的对象都能访问的属性。
实例引用类中定义的公有属性,公有属性发生改变,则引用的也一起改变。
注意:类中定义的的方法也相当于一个公有属性。
类的析构:一般用于程序的一些收尾工作。
定义:
def __del__(self):
pass
总结:
1、类是模板,而实例是根据类创建的对象;
2、每个实例各自拥有其属性,相互独立,互不影响,而类属性(公有属性)有且仅有一份;
3、公有属性是直接绑定在类上的,故访问公有属性不需要创建属性就可以直接访问;
其次,类中所有实例都可以访问到它们所属类的属性;
4、python是动态语言,故公有属性也可以动态添加和修改;因为公有属性只有一份,故当类属性改变时,所有实例访问的公有属性都改变了;
5、当实例属性和公有属性同名时,实例属性在该实例中优先级较高,访问时将屏蔽类属性;
6、实例方法的第一个参数一定是self。
补充:
1、什么是面向对象编程?
类+对象
2、什么是类,什么是对象,他们有什么关系?
类里面包含了函数
class 类名: def 函数1(): pass def 函数2(): pass obj = 类() # obj是对象,此处是实例化的过程 obj.函数1()
3、什么时候适用面向对象?
⑴ 根据模板创建某些对象
⑵ 要求对实例进行扩展
⑶ 如果多个函数需要传入共同参数时
4、函数(方法)和公有属性保存在类里面,普通属性保存在对象里面。
属性:
普通属性(保存在对象中)
公有属性(保存在类中)
方法:
普通方法(保存在类中,调用者为对象)
静态方法(保存在类中,调用者是类,无需创建对象,可以有任意个参数),eg:
class F1: @staticmethod def a1(*args): print("hello") F1.a1()
# 输出hello
5、self就是调用当前方法的对象。
静态字段使用场景:每个对象中保存相同的东西时,可以使用静态字段。
6、封装:
类中封装了属性和方法;
对象中封装了普通属性的值。