Python基础知识(13):封装与继承

一、面向对象的三大特征

1.封装:提高程序安全性,若不希望外部调用类属性,可以加两个下划线。
2.继承:提高代码复用性。
3.多态:提高程序的可扩展性和可维护性。

二、封装

对实例属性使用两个下划线,例如self.__age = age,此时外部不可调用__age(相关代码详见链接: Python基础知识(12):类与对象)。
注意:使用stu._Student__age可以强行调用,_Student__age是在dir(stu)中找到的。

三、继承

1.语法

class 子类类名(父类1, 父类2,.....):
	pass

2.若一个类没有继承任何类,则默认其父类为object。
3.Python支持多继承:class C(A, B):
4.定义子类时,必须在其构造函数中调用父类的构造函数。
例:

class Person():
	def __init__(self, name, age):
		self.name = name
		self.age = age
	def info(self):
		print(self.name)
		print(self.age)
class Student(Person):
	def __init__(self, name, age, score):
		# 父类的构造函数
		super().__init__(name, age)
		self.score = score
# 调用
stu = Student('张三', 20, 100)
stu.info() # 继承自父类

5.方法重写
1)若子类对继承自父类的某个属性或方法不满意,可以再子类中对其进行重写。
2)子类重写后的方法中可以通过super().XXX()调用父类中被重写的方法。
例:上述代码,Person的方法info中没有score,可以再Student中对info进行重写:

def info(self):
	supper().info()
	print(self.score)

四、object类

1.是所有类的父类,所有类都有object类的属性和方法。
2.dir()可以查看指定对象的所有属性。
3.object有一个__str__方法,帮我们插卡对象的信息。

五、多态

1.即便不知道一个变量所引用的对象到底是什么类型,仍可以通过这个变量调用方法,在运行过程中根据变量所引用的对象类型,动态的决定调用对象中的方法。

class Animal(object):
	def eat(self):
		print('吃!')
class Cat(Animal):
	def eat(self):
		print('Cat')
class Dog(Animal):
	def eat(self):
		print('Dog')
class Person(object):
	def eat(self):
		print('Person')
def fun(animal):
	animal.eat()
# 调用
fun(Dog())
fun(Cat())
fun(Person())

2.静态语言实现多态的三个必要条件:继承、方法重写、父类引用指向子类对象。
3.动态语言的多态崇尚“鸭子类型”。

六、特殊属性

1.__dict__:获取类对象或实例对象所绑定的所有属性和方法的字典。
2.__class__:获取对象的所属类。
3.__bases__:获取父类类型的元素。
4.__base__:多重继承时,输出第一个父类。
5.__mro__:类的层次结构。
6.__subclasses__:用于获取该类下的子类列表。

七、特殊方法

1.__len__():通过重写__len__()方法,让len()的参数可以试试自定义类型。
2.__add__():通过重写该方法,可使自定义对象有+的功能。
3.__new__():用于创建对象。
4.__init__():对创建的对象进行初始化。

八、类的浅拷贝与深拷贝

(一)浅拷贝

只拷贝了一个地址,两个变量指向的还是同一个对象。

(二)深拷贝

copy模块的deepcopy函数,可以将对象的所有内容拷贝至另一个变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值