02.Python基础

主要内容:

  • 类和实例
  • 模块的使用
  • 包的使用
一、类和实例

  1. 类和实例的定义
  2. 类的创建
  3. 类的继承
  4. 类中的方法
  5. 类的使用
定义
类(class)是拥有相同属性和行为的抽象原型,而实例是根据类创建出来的具体对象,每个对象拥有相同的函数方法,数据不同。
类的创建

格式:class 类名():

class Animal():
类的继承

格式:class 子类类名(父类类名[,父类类名2[,....): 。子类可以继承父类的属性和方法

class Dog(Animal):
类中的方法
class Animal():
    def __init__(self,name,shouts,food,className):#初始化方法 self不是关键字,代表当前实例,在实例化的时候自动执行
        #声明属性
        self.name=name #通过self 创建实例属性并赋值
        self.shouts=shouts
        self.food=food
        Animal.className=className #类属性
        #self.__name=name #私有属性
    def shout(self):
        print("%s的叫声是%s,吃的食物是%s"%(self.name,self.shouts,self.food))

__init__()是初始化方法(构造方法),在类被调用时,这个方法会自动执行。其中参数“self”指的是实例本身,实例化时,会自动将实例本身通过self传进去。

另:为了确保内部属性不被外部随意修改,可以在属性名前加入双下划线(eg:self.__name=name),这样就变成了私有属性,不被外部访问。若是外部要修改或访问,可以创建一个方法返回

def get_name(self): #获取私有属性值
        return self.__name 

def set_name(self,name): #修改私有属性值
        return self.__name=name

继承父类中的构造方法

class Dog(Animal):
    def __init__(self,name,shouts,food,className,drink):
        #加载父类的构造方法
        super().__init__(name,shouts,food,className)
        self.drink=drink

在继承父类的子类构造方法中实现父类的构造方法,使用super().__init__(父类参数)

普通方法

def virtual(self):
    print("喵喵叫")

静态方法(它不需要传入self参数,也不能访问实例属性,而只能访问类属性)

@staticmethod
class a():
    ts='类属性'
    def __init__(self,s):
        self.s=s
    def staticMethod(data): #这里不要传递self
        print(data,a.ts)  #只能访问类属性

#静态方法调用方式,可以通过类名.静态方法名 或是 实例对象.静态方法

#类名.静态方法
a.staticMethod('静态方法')
#实例对象.静态方法
aObject=a('实例属性')
aObject.staticMethod('静态方法')

类方法(它不能访问实例属性,只能访问类属性)

@classmethod
class a():
    ts='ce'
    def __init__(self,s):
        self.s=s
    def classMethod(cls,data): #这里的cls指的是类(class)
        print(data,cls.ts)

#类方法调用方式,可以通过类名.类方法名 或是 实例对象.类方法名

#通过类名.类方法名 (推荐方式)
a.classMethod(1)

#通过实例对象.类方法名
aObject=a('t')
aObject.classMethod(1)

类的使用

变量名=类名(参数[,.......)

二、模块的使用

1.导入方式

导入整个模块:import 模块名[,模块名[,.... 

import time  #引入模块
print("start")
time.sleep(5) #调用模块中的方法
print("end")

导入指定模块的指定方法:from 模块名 import 方法名  (当方法名是 *星号,表示导入模块的所有内容)

from time import sleep  #引入模块中的部分方法

print("start")
sleep(5)   #调用方法
print("end")

给导入的模块取别名:import 模块名 as 别名

import time as t  #给模块取别名

t.sleep(5) #调用方法

2.自定义模块

#test文件

def test_add(x,y):
    return x+y

当test文件与main文件在同级目录下时,调用方法:

#main文件

import test  #引入test模块
print(test.test_add(3,5)) #调用test模块中的方法

当test文件在main文件的同级子目录中时,调用方法:

#main文件

import 子目录名称.test

print(子目录名称.test.test_add(5,3))

'''
或者
from 子目录名 import test
print(test.test_add(5,2))
'''

当test文件在main文件的父级目录的同级目录中时,调用方法:

#main文件

import sys
#添加目标目录到当前环境中
sys.path.append('..\\')  #返回上级目录

import main父类目录的同级目录名.test #引入模块

print(main父级目录的同级目录名.test.test_add(5,2))  #调用方法

'''
或者
from main父级目录的同级目录名 import test

print(test.test_add(5,2))
'''

另外:dir方法 用于按模块名搜索模块定义,它返回的是包含所有类型名称(类,变量,方法等)的字符串类型的列表  如:dir(模块名)

三、包的使用

一个目录中除了有模块文件,并包含有__init__.py文件,才能被程序认为是一个包。__init__.py文件中必须要写入 __all__=["模块名",“模块名2”,.......]。如果__init__.py文件内容为空,仅仅是把这个包导入,包内的模块并未被导入。__all__变量可以用来控制 from 包名 import * 时导入的模块。

#包名:study (也就是一个文件夹)
#模块:A B C  (也就是文件夹中的文件)

#__init__.py 文件

__all__=['A','B','C'] #列表中的元素是 允许被导入的模块名称

#main 文件

import sys
sys.path.append('..\\')

from study import *
A.method('A')
B.method('B')
C.method('C')

重新加载

import A
#import A #引入2次只输出一次,这是因为模块在第一次引入的之后,其他导入就不再有效。

import imp
imp.reload(A) #重新加载A



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莱斯笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值