Python基础语法(九)

一、面向对象

1.继承简介

继承 是面向对象的三大特性之一  
作用: 通过继承可以使一个类获取其它类中的属性和方法
使用方法:
在定义类时,可以在类名后的括号中指定当前类的父类(超类、基类、super)
这样子类(衍生类)就可以直接继承父类中所有的属性和方法

class Animal:
    def run(self,name):
        print('%s逃跑一流'%name)

    def sleep(self,name):
        print(name+'半睡半醒')

# 定义一个继承Animal的 Dog类
class Dog(Animal):
    def bark(self):
        print('汪汪汪')

a=Animal()
a.run("小哈")
a.sleep("亮")
b=Dog()
b.bark()

2. 方法重写

在子类中重写定义一个父类拥有的方法, 调用时使用子类中重写定义的方法

class Animal:
    def run(self):
        print('动物会跑~~~')

    def sleep(self):
        print('动物睡觉~~~')

class Dog(Animal):
    def bark(self):
        print('汪汪汪~~~') 

d = Dog()
d.run()


----------------------------------------
class Animal:
    def run(self):
        print('动物会跑~~~')

    def sleep(self):
        print('动物睡觉~~~')

class Dog(Animal):
    def bark(self):
        print('汪汪汪~~~') 
   	def run(self):
   		print('狗会跑')

d = Dog()
d.run()

3. super()

super() 函数是用于调用父类(超类)的一个方法。
super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。

class A:
    def add(self, x):
        y = x + 1
        print(y)
class B(A):
    def add(self, x):
        super().add(x)
b = B()
b.add(2)

4.多重继承

继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能。

class Animal(object):
  pass
class Mammal(Animal):
  pass
class Bird(Animal):
  pass
class Dog(Mammal):
  pass
class Bat(Mammal):
  pass
class Parrot(Bird):
  pass
class Ostrich(Bird):
  pass

5.多态

让具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容(功能)的函数。

class Duck(object):                                  # 鸭子类
    def fly(self):
        print("鸭子沿着地面飞起来了")

class Swan(object):                                  # 天鹅类
    def fly(self):
        print("天鹅在空中翱翔")

class Plane(object):                                 # 飞机类
    def fly(self):
        print("飞机隆隆地起飞了")

def fly(obj):                                        # 实现飞的功能函数
    obj.fly()

duck = Duck()
fly(duck)

swan = Swan()
fly(swan)

plane = Plane()
fly(plane)

6.属性和方法

# 定义一个类
class A(object):
    # 静态方法
    # 在类中使用 @staticmethod 来修饰的方法属于静态方法  
    # 静态方法不需要指定任何的默认参数,静态方法可以通过类和实例去调用  
    # 静态方法,基本上是一个和当前类无关的方法,它只是一个保存到当前类中的函数
    # 静态方法一般都是一些工具方法,和当前类无关
    @staticmethod
    def test_3():
        print('test_3执行了~~~')

A.test_3()

a = A()
a.test_3()

二、模块

1.模块简介

python中的模块是什么?简而言之,在python中,一个文件(以“.py”为后缀名的文件)就叫做一个模块,每一个模块在python里都被看做是一个独立的文件。模块让你能够有逻辑地组织你的 Python 代码段。把相关的代码分配到一个模块里能让你的代码更好用,更易懂。模块能定义函数,类和变量,模块里也能包含可执行的代码。一个模块编写完毕之后,其他模块直接调用,不用再从零开始写代码了,节约了工作时间;避免函数名称和变量名称重复,在不同的模块中可以存在相同名字的函数名和变量名,但是,切记,不要和系统内置的模块名称重复。

  • 模块的三种来源:
    1.内置的(python解释器自带)
    2.第三方的(别人写的)
    3.自定义的(我们自己写的)

2.模块的创建

Python创建自己的模块很方便,所有的.py文件都被视为是一个模块
我们可以用import 文件名的方式把它导入自己的新文件
不过我们要注意创建的模块要符合命名规范,比如首字母不能是数字等
如果首字母是数字就会出现语法错误
引用的时候不用加扩展名.py

3.模块的使用

1.from…import跟import不同的是import会读取整个模块,所以impot必须进行定义后才能读取它的变量名,而from…import访问模块中的名字不需要加模块名前缀,它直接拿到指向模名称空间中某个值的名字进行访问的,但是from…import在访问模块中的名字可能会与当前执行文件中的名字冲突。例如:
2.模块的查找顺序是:先从内存中找,内存中没的话会去内置中找,内置中找不到的话会去sys.path中找(环境变量)
if name == ‘main’:
只要我们创建了一个模块(一个.py文件),这个模块就有一个内置属性name生成,该模块的 name 的值取决于如何应用这个模块。简单的说就是,如果我们直接运行该模块,那么__name__ == “main”;如果你 import 一个模块,那么模块name 的值通常为模块文件名。

# import datetime是引入整个datetime模块,如果使用datetime模块中的datetime类,
需要加上模块名的限定。
import datetime
print datetime.datetime.now()
# 如果不加模块名限定会出现错误:TypeError: 'module' object is not callable \ 
AttributeError: 'module' object has no attribute 'now'


# from datetime import datetime是只引入datetime模块里的datetime类,
在使用时无需添加模块名的限定。

from datetime import datetime
导入所有方法
from bs4 import *
print datetime.now()

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值