Python自学记录目录
Python自学记录-第1周
Python自学记录-第2周
Python自学记录-第3周
Python自学记录-第4周
Python自学记录-第5周
Python自学记录-第6周
Python自学记录-第7周
Python自学记录-第8周
前言
python的学习已经过去两个月了,眼下学习的内容是越来越多了,很多新的知识突然冒出来,有点遭不住啊……
本周继续学习python中继承、多态、重写、特殊属性和方法、浅拷贝和深拷贝、模块等。
一、概念
1、继承
简单来说,就是子类继承父类的属性和方法。
举个栗子,你爸是马云,那你就继承了他的美貌和智慧 (还有百万家产)
语法格式
PS:Python中的继承还可以进行多继承
(你可以同时拥有多个爸爸)
2、重写
- 父类没有的属性,子类可以自定义属性使用
- 不满意源父类属性,也可以将父类的属性重写
- 调用父类的属性使用super()即可
还是举个栗子,父类是汽车,子类不愿意继承父类只作为交通工具的能力,于是重写能力,加入了炫酷的外观和强劲的马力,子类是兰博基尼。
3、object类
object类是所有类的父类,所有类都拥有其属性和方法
我愿称之为始祖父类
4、多态
多态就是多种类型。
就是我虽然不知道引用对象什么类型,但可以通过此变量调用方法。
5、特殊方法和特殊属性
不做过多赘述,按照使用方法使用即可
6、浅拷贝和深拷贝
浅拷贝:一般拷贝都是浅拷贝,对象包含的子对象内容不拷贝,都是相同的
深拷贝:使用copy模块的deepcopy函数,可以递归对象的子对象进行拷贝,即除了源对象,其他所有子对象也不相同
浅拷贝指向的子对象都是相同的
但深拷贝指向的子对象也不相同了
7、模块
什么叫做模块?在python中一个.py文件就是一个模块
注意:自定义模块名称不要和系统的模块名字相同
导入模块的两种格式
二、代码实例
1.继承和重写
这个例子中,Person为父类,Student和Teacher作为子类继承其父类的属性,也重写了部分属性,是子类独有的。
class Person(object): # Person继承object类
def __init__(self,name,age):
self.name=name
self.age=age
def info(self):
print(self.name,self.age)
class Student(Person): # 继承Person
def __init__(self,name,age,stu_no):
super().__init__(name,age) # 调用父类
self.stu_no=stu_no
def info(self):
super().info() # 调用父类的属性
print(self.stu_no)
class Teacher(Person):
def __init__(self,name,age,teachofyear):
super().__init__(name,age)
self.teachofyear=teachofyear
def info(self):
super().info()
print('教龄',self.teachofyear)
stu = Student('张三',20,'1001')
teacher = Teacher('李四',34,10)
stu.info()
print('-------teacher.info()---------')
teacher.info()
运行结果
张三 20
1001
-------teacher.info()---------
李四 34
教龄 10
2.多态
Animal是父类,Dog和Cat继承了Animal,但Person()没有继承Animal也能使用eat()函数输出
class Animal(object):
def eat(self):
print('动物会吃')
class Dog(Animal):
def eat(self):
print('狗吃骨头')
class Cat(Animal):
def eat(self):
print('猫吃鱼')
class Person:
def eat(self):
print('人吃五谷杂粮')
# 定义一个函数
def fun(obj):
obj.eat()
# 开始调用函数
fun(Cat())
fun(Dog())
fun(Animal())
print('----------')
fun(Person())
输出结果为:
猫吃鱼
狗吃骨头
动物会吃
----------
人吃五谷杂粮
3、深拷贝和浅拷贝
这里例子很好解释了深拷贝和浅拷贝对其子对象的操作,看ID的改变就知道了。
class CPU:
pass
class Disk:
pass
class Computer:
def __init__(self,cpu,disk):
self.cpu=cpu
self.disk=disk
# (1)变量的赋值
cpu1 = CPU()
cpu2 = cpu1
print(cpu1,id(cpu1))
print(cpu2,id(cpu2))
# (2)类有浅拷贝
print('----------')
disk = Disk() #创建一个硬盘类的对象
computer = Computer(cpu1,disk) # 创建一个计算机的类
#浅拷贝
import copy
print('-------------copy-----------------')
computer2 = copy.copy(computer)
print(computer,computer.cpu,computer.disk)
print(computer2,computer2.cpu,computer2.disk)
print('------------------deepcopy--------------------')
computer3 = copy.deepcopy(computer)
print(computer,computer.cpu,computer.disk)
print(computer3,computer3.cpu,computer3.disk)
总结
本周又涉及到了很多知识点,剩余的内容已经不足一半了,看来我的python大成指日可待啊!