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

 

 在类里使用动态参数,可以调动多个对象

 

 

调用方法(method):

1.普通方法,如show(),info()

2.特性方法,@property

只具备只读属性,不能写(这个方法里面不能有形式参数)

调用特性方法的时候,没有括号

 

 3.静态方法:@staticmethod

理解为全局变量,但是不能等价于全局变量,静态方法的特点是使用类名来直接调用,在静态方法里面不能调用实例属性

静态方法主要是用来存放逻辑性的代码,主要是一些逻辑属于类,但是和类本身没有交互

 

 4.类方法:classmethod

它和静态方法一样,使用类名直接访问的方法调用输出

 

 5.类属性的调用方法

 

 

二、继承

"""java与python的继承区别:
1)python是一个类可以继承N个类
2)Java只能继承一个类"""

1.概念:

1.基类(父类):被继承的类
2.派生类(子类):继承其他的类

下面Animal是父类,Person是子类

 

 

 

 2.子类继承父类,继承了什么?

1)数据属性

2)实例属性

3)方法

 

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__':是一种方法:

作用是统一函数执行的入口

 

 

 

 

posted @ 2022-04-01 18:44  lm970418  阅读(210)  评论(0编辑  收藏  举报