1. 面向对象与面向过程
面向过程:
根据业务逻辑从上到下写代码强调的是每一步都得亲自完成。
面向对象:
将数据和函数一起封装,减少重复代码,绝对相信一个人,很多操作我让他代替我执行。
2. 三大特性
封装,继承,多态
3. 定义
class object:
""" The most base type """
4. 方法
1. __init__(self):
def __init__(self): # known special case of object.__init__
""" Initialize self. See help(type(self)) for accurate signature. """
pass
2. __new__(cls, *more):
def __new__(cls, *more): # known special case of object.__new__
""" Create and return a new object. See help(type) for accurate signature. """
pass
3. __str__(self, *args, **kwargs):
def __str__(self, *args, **kwargs): # real signature unknown
""" Return str(self). """
pass
返回字符串。
注:
- self指向每一个创建出来的实例对象,相当于形参。
- 初始化的是通过类创建的对象。
- 每个类里面必须要有一个init。
- new创建并返回一个新对象,该方法在init之前调用。
- __…__表示魔法方法,在有些时候会自动调用。
5. 举例
class Dog(object): # 命名规则:大驼峰
def __init__(self, name):
self.name = name
dog1 = Dog('小白')
dog1.lag = 4 #动态增加实例属性(临时属性)。
print(dog1)
1. 通过类创建实例
实例 = 类名()
注:如果有init需要传参,那么()填写init的参数。
2. 调用实例的属性
1. 在类的内部
在方法中调用的实例属性,self.属性名调用,因为self指向的就是实例。
2. 在类的外部
- 创建实例
dog = Dog()
- 调用属性
dog.name
注:在类的外部,通过创建对象来调用实例属性。
3. 通过实例调用方法
1. 在类的外部
注:
- 通过实例调用。
- 如果方法需要传参,在方法的()里面直接写入实参。
2. 在类的内部
通过self.方法名()调用。
4. 动态增加临时属性并获取
注:
- 实例属性与临时属性的区别:
实例属性只要通过当前类创建的实例对象都具有。
临时属性,是一个案例具有的,其他实例对象可有可无。 - 在写web的时候,可能会为了方便起见而添加。
5. __init__()、__new__()方法
- new方法创建并返回新对象。
- init方法完成实例的初始化。
- new方法先调用。
6. __str__()魔法方法
return 字符串
7. 实例属性的更改
- 在类的外部:dog.leg = 5
- 在类的内部
8. 继承
- 继承关系中,子类继承父类的方法与属性,
即:子类可以使用父类的属性和方法。 - 如果子类的方法与父类是同名的,使用子类自己的属性。
- 如果子类已经的init方法,没有特殊操作不能直接调用父类的属性。