日期:2020年2月12日
作者:Commas
注释:学习就是为了忘记,面向对象的三大特征,类的属性与方法,对象的属性与方法……
如果您想了解更多有关Python的知识,那么请点《我的Python浅谈系列目录》
一、面向对象的三大特征
序号 | 特征 | 说明 |
---|---|---|
1 | 封装 | 将代码放到一个容器(类) 里面,使其变量与外界隔离,隐藏其属性和实现细节,仅对外提供公共访问的方式 |
2 | 继承 | 为了提高代码利用率,减少重复代码的书写,子类继承父类的所有属性与方法,实际就是保存了一个父类的引用,访问属性和调用方法的原则是"就近原则" |
3 | 多态 | 从字面量理解就是一个事物的多种形态,如子类继承父类后重写的方法,虽和父类方法名一样,但是已经不再是父类那种“形态” |
二、类其实也是一个对象
类其实也是一个对象,Python在执行代码的时候,读到一个类的时候,会将这个类加载到内存中,不知你是否注意到了,我们可以通过点运算符
调用类中的属性和方法,这部也恰恰说明了类实则是一个对象,我们把这个特殊的对象称为类对象
,而我们经常说的对象,通常情况下是指通过类对象所实例出来的一个对象,而被实例出来的对象,则是所谓的实例对象
,也叫做实例。类对象与实例对象存储内容如下表所示:
属性或方法 | 类对象 | 实例对象 |
---|---|---|
类属性 | 存储 | 仅储存引用 |
类方法 | 存储 | 仅存储引用 |
实例属性 | 不存储 | 存储 |
实例方法 | 存储 | 仅存储引用 |
三、类对象与实例对象的例子
class Chinese:
"""中国人的类"""
language = "Mandarin"
@classmethod
def show_native_tongue(cls):
"""【类方法】通过@classmethod创建"""
print("{}是我的母语".format(cls.language))
@staticmethod
def show_me():
"""
【静态方法】通过@staticmethod创建
1、既不需要访问实例属性或调用实例属性
2、也不需要访问类属性或调用类方法
"""
print("我是中国人")
def __init__(self, name, sex="male"):
self.name = name
self.sex = sex
def say_hello(self):
"""【实例方法】中国式打招呼"""
print("{}:吃了饭没呀?".format(self.name))
class Cantonese(Chinese):
"""广东人类,继承中国人类"""
def say_hello(self):
"""重写方法,广东人打招呼"""
print("{}:食咗饭未呀?".format(self.name))
# 可能广东话听不懂,所以父类的普通话再问候一遍
super().say_hello()
xu = Cantonese("老许")
# 属性
print(xu.language)
print(xu.name)
print(xu.sex)
# 方法调用
xu.say_hello()
Chinese.show_native_tongue()
Chinese.show_me()
xu.show_native_tongue()
xu.show_me()
控制台输出:
Mandarin
老许
male
老许:食咗饭未呀?
老许:吃了饭没呀?
Mandarin是我的母语
我是中国人
Mandarin是我的母语
我是中国人
版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/104290711