python中的类和继承
1.面向对象
什么是面向对象:
所谓面向对象就是说:站在上帝的视角下,世界万物一切皆对象。把拥有共同的属性归为一类,这就是class的由来。
类的定义:
关键字:class
类的名称首字母必须是大写的
类里面有哪些东西?
1.属性:分为类属性(类属性又叫数据属性)和实例属性
2.方法(其实就是之前学习过的函数)
类里面的属性及方法,调用的前提是首先要对类进行实例化处理
下面我们创建一个简单的类
class Person(object):#object是所有类的父类,可以说是类的祖先
# 构造方法:针对类初始化的时候必须要对构造方法里面的实例属性赋值
def __init__(self, name, age): # init:初始化
# 实例属性的过程
self.name = name
self.age = age
def show(self): #写一个方法,方法的括号里面都有self
print('my name is {0},and my age is {1}'.format(self.name,self.age))
obj=Person(name='lm',age=20)#obj:1.它是一个变量 2.他是类的对象
obj.show()#通过类的对象来调用方法
调用方法的执行顺序:
1.执行构造方法
2.执行真正调用的方法
3.执行析构方法
在方法当中增加实例属性sex
在类里使用动态参数,可以调动多个对象
1.普通方法,如show(),info()
2.特性方法,@property
只具备只读属性,不能写(这个方法里面不能有形式参数)
调用特性方法的时候,没有括号
3.静态方法:@staticmethod
理解为全局变量,但是不能等价于全局变量,静态方法的特点是使用类名来直接调用,在静态方法里面不能调用实例属性
静态方法主要是用来存放逻辑性的代码,主要是一些逻辑属于类,但是和类本身没有交互
4.类方法:classmethod
它和静态方法一样,使用类名直接访问的方法调用输出
5.类属性的调用方法
"""java与python的继承区别:
1)python是一个类可以继承N个类
2)Java只能继承一个类"""
1.概念:
1.基类(父类):被继承的类
2.派生类(子类):继承其他的类
下面Animal是父类,Person是子类
2.
3.继承的原则:
1.从左到右的原则:线性查找的顺序规则,也就是说调用show()方法,如果找到第一个满足的方法,后面继承的类即使有这个方法,也不会调用。
前提条件:子类没有重写父类的方法
class Father(object): def __init__(self,salary): self.salary=salary @property def getSalary(self): return self.salary def show(self): print('男人赚钱') class Mother(object): def __init__(self,hobby): self.hobby=hobby def show(self): print('女人花钱') class Son(Father,Mother): def __init__(self,salary,hobby): Father.__init__(self,salary) Mother.__init__(self,hobby) obj=Son(salary=100,hobby='读书') obj.show()
查看继承的顺序方法mro
2.从下到上
前提条件:子类重写了父类的方法,那么调用父类以及子类共同拥有的方法的时候,优先调用子类自己的方法
这里Person继承了Animal的方法,并且重写了自己的方法(增加了sex)
3.错误的继承方法示例:
Animal是父类,Person继承了Animal是子类,XianCity又继承了Animal和Person
不能跨级别继承
多态性
多态的优势:
1.增加了持续的灵活性
2.增加了持续的额外扩展功能
if __name__=='__main__':是一种方法:
作用是统一函数执行的入口