发布于2020-03-10 20:20 阅读(847) 评论(0) 点赞(11) 收藏(5)
面向对象(Object Oriented,简称OO)思想在Java及其他编程语言中使用非常广泛,面向对象的思想也来自于生活中的灵感,很多现实世界的物体或聚合体我们都可以对其进行抽象化归纳,抽象思维是一种思想活动,依靠想象力和对事物的特征的通用特性进行整理,最终形成一个或一类的具化对象。如:人,我们可以理解为一种抽象的集合,具有名字、头、身、手、脚、能直立行走、可以使用工具、具备自主意识、等一些列特征,我们可以将这一系列公共特征组合在一起看成一个对象,即:人。
其中人这个对象,在编程语言中我们需要将这个对象表示出来,也就是我们说的类(Class),在类中,我们可以将名字等看作是类的属性,将直立行走等行为看作是类的方法。
引入这种面向对象的思想之后,我们可对现实世界中繁多的物体进行类化映射到程序世界里面,结合一些设计原则和设计模式,我们就可以构建更为复杂和庞大的程序,同时也更易于维护和扩展,当有了类之后,仿佛一切都有了规则和秩序。
本博主将按照Java语言的面向对象的特性,去学习Python语言的面向对象知识。
其中面向对象最重要的三个特征:封装、继承、多态。将围绕这三个特征切入学习。
在学习之前我们需要了解一些基本的知识,那么如如何定义类、如何使用类实例、如何调用类属性和方法?
类的基本组成单元:属性和方法。
类的语法格式如下:
class 类名:
# 属性
# 方法()
举个例子:
创建People类,此类包含两个属性,和两个方法。
# 定义对象为人的类
class People:
# 类的属性(可以是公共、也可以是私有的)
# 公有属性,能在本类之外调用
name = ""
# 私有属性,不能在本类之外调用
__privacy = ""
# 类的默认构造函数
def __init__(self):
print("调用默认构造函数")
# 自定义构造函数
# def __init__(self, name):
# self.name = name
# print(self.name + "调用自定义的构造函数")
# 类的公有方法,无外部参数
def walk(self):
print("直立行走")
# 类的私有方法,有外部参数
def do(self, someThing):
print(self.name + someThing)
def 方法名称(self,参数1,参数2,参数3,...参数n):
#方法体
注意:类中的方法,第一个参数需要指定为self,这个是python约定的,且在调用该公共方法时,这个self对应的参数是不需要传入的,只需要传入,参数1,参数2,参数3,…参数n即可。
上面例子中的__init__即为类默认的构造函数,其中构造函数可以自定义,使用自定义构造函数之后,默认构造函数不再生效。构造函数执行顺序和java是一致的,类实例化的时候调用。
很诡异的地方是,自定义构造函数之后,默认构造函数不在生效了。
补充一点:静态方法,在方法名上方添加这个注解@staticmethod即可。
先导入类,然后创建类的实例,然后通过类的实例调用公共属性和公共方法。
# 导入类
from People import People
# 自定义构造函数
# people2 = People("成年人")
# 创建类的实例
people = People()
# 调用类的公共属性和方法
people.name = "成年人"
people.do('只看利弊')
people.name = "小孩子"
people.do('才分对错')
调用默认构造函数
成年人只看利弊
小孩子才分对错
私有属性或方法都有两个下划线开头__;
创建实例通过:类名(),与java相比没有new 关键字;
Python类的用法上与Java非常类似。
其中我们看到 self 关键字,在类中定义一个私有或者公有的方法,需要指定第一个参数为self,self指类本身,类似java的this关键字,其中self这个参数名是可以修改的,如改成self2,self3等,但不建议这么做,因为Python一般都约定为此参数名为self。
作者:众神之战
链接:https://www.pythonheidong.com/blog/article/251467/0ac82eb414ac3cad9faa/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!