Python3 菜鸟教程 笔记9 -- 面向对象、标准库

$ 面向对象
对象是类的实例。
方法是类中定义的函数。

@ 类对象
类有一个名为 __init__() 的特殊方法(构造方法),该方法在类实例化时会自动调用:
def __init__(self):
    self.data = []

self代表类的实例,而非类
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。

class Test:
    def prt(self):
        print(self)
        print(self.__class__)
 
t = Test()
t.prt()
执行结果(self 代表的是类的实例,代表当前对象的地址;而 self.class 则指向类):
<__main__.Test object at 0x00000257C2C609C8>
<class '__main__.Test'>

说明:self 不是 python 关键字,换成其它效果相同。

@ 类的方法 -> 使用 def 关键字来定义方法,必须包含参数 self, 且为第一个参数

@ 继承、方法重写

#!/usr/bin/python3
 
#类定义
class people:
    #定义基本属性
    name = ''
    age = 0
    #定义私有属性,私有属性在类外部无法直接进行访问
    __weight = 0
    #定义构造方法
    def __init__(self,name,age,weight):
        self.name = name
        self.age = age
        self.__weight = weight
    def speak(self):
        print("%s说: 我今年%d岁。" %(self.name,self.age))
 
#单继承示例
class child(people):
    food = ''
    def __init__(self,name,age,weight,food):
        #调用父类的构函
        people.__init__(self,name,age,weight)
        self.food = food
    #覆写父类的方法
    def speak(self):
        print("%s说: 我%d岁啦,我饿了~有没有%s吃?"%(self.name,self.age,self.food))
 
#另一个类,多重继承之前的准备
class speaker():
    topic = ''
    name = ''
    def __init__(self,name,topic):
        self.name = name
        self.topic = topic
    def speak(self):
        print("我叫%s,我今天要演讲的主题是“%s”。"%(self.name,self.topic))
 
#多重继承
class sample(speaker,child):
    a =''
    def __init__(self,name,age,weight,food,topic):
        child.__init__(self,name,age,weight,food)
        speaker.__init__(self,name,topic)

print('#child类继承自people类')
test1 = child('羡羡',3,130,'莲藕排骨汤')
test1.speak()
print('#sample类继承自child类和speaker类')
test2 = sample('无羡',3,130,'莲藕排骨汤','如何成为莲花坞最皮的崽')
test2.speak()   #方法名同,默认调用的是在括号中排前地父类的方法

执行结果:

#child类继承自people类
羡羡说: 我3岁啦,我饿了~有没有莲藕排骨汤吃?
#sample类继承自child类和speaker类
我叫无羡,我今天要演讲的主题是“如何成为莲花坞最皮的崽”。

 

@ 子类继承父类构造函数说明

1.子类不重写__init__()方法,实例化子类,会自动调用父类的__init__()的方法。

2.子类重写__init__()方法,实例化子类,不会自动调用父类的__init__()的方法。

3.子类重写__init__()方法又要继承父类的构造方法,可以使用 super 关键字:

super(子类,self).__init__(参数1,参数2,....)    注:在类之外,self 可换成实例名如c = Child(),eg:super(Child,c).myMethod()

还有一种经典写法:父类名称.__init__(self,参数1,参数2,...) 

 

@类的私有属性与私有方法
__private_attrs:两个下划线开头,声明该属性为私有,只能在类的内部调用self.__private_attrs ,不能在类的外部调用。

__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用self.__private_methods ,不能在类的外部调用。

实例(在类的外部)不能访问私有变量,否则 AttributeError: 'xxx' object has no attribute '__xx'

 

$ Python3 标准库概览(摘录)
模块时内置的 dir() 和 help() 分别可以看模块下的方法和帮助

@ 操作系统接口
os模块提供了与操作系统相关联的函数
>>> import os
>>> os.getcwd()      # 返回当前的工作目录
'C:\\Python34'
>>> os.chdir('/server/accesslogs')   # 修改当前的工作目录
>>> os.system('mkdir today')   # 执行系统命令 mkdir 
0    # 创建成功
>>>
针对日常的文件和目录管理任务,shutil模块提供了一个易于使用的高级接口:
>>> import shutil
>>> shutil.copyfile('data.db', 'archive.db')
>>> shutil.move('/build/executables', 'installdir')

@ 文件通配符
glob模块提供了一个函数用于从目录通配符搜索中生成文件列表:

>>> import glob
>>> glob.glob('*.py')
['primes.py', 'random.py', 'quote.py']

@ 命令行参数
通用工具脚本经常调用命令行参数。这些命令行参数以链表形式存储于 sys 模块的 argv 变量。
例如在命令行中执行 "python demo.py one two three" 后可以得到以下输出结果:
>>> import sys
>>> print(sys.argv)
['demo.py', 'one', 'two', 'three']

@ 日期和时间,datetime模块
>>> from datetime import date
>>> now = date.today()
>>> now
datetime.date(2019, 10, 26)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'10-26-19. 26 Oct 2019 is a Saturday on the 26 day of October.'
>>> 
>>> birthday = date(1949, 10, 1)
>>> age = now - birthday
>>> age.days
25592
>>> 

@ 数据压缩
以下模块直接支持通用的数据打包和压缩格式:zlib,gzip,bz2,zipfile,以及 tarfile。

>>> import zlib
>>> s = b'witch which has which witches wrist watch'
>>> len(s)
41
>>> t = zlib.compress(s)
>>> len(t)
37
>>> zlib.decompress(t)
b'witch which has which witches wrist watch'
>>>

@ 性能度量
有些用户对了解解决同一问题的不同方法之间的性能差异很感兴趣。Python 提供了一个度量工具,为这些问题提供了直接答案。
>>> from timeit import Timer
>>> Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()
0.57535828626024577
>>> Timer('a,b = b,a', 'a=1; b=2').timeit()
0.54962537085770791

相对于 timeit 的细粒度,profile和pstats模块提供了针对更大代码块的时间度量工具。

@ 测试模块
doctest模块提供了一个工具,扫描模块并根据程序中内嵌的文档字符串执行测试。
unittest模块可以在一个独立的文件里提供一个更全面的测试集。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值