Python基础笔记5-简说面向对象part1


温馨提示:手机观看时,代码块可以左右滑动

Python的面向对象

Python的类

在这门语言中,类使用 class 语句来定义。在类中包含了一系列语句,比如赋值语句,def 定义函数等。从面向对象的角度看,类封装了对象的行为和数据。在Python的类中变量就是对象的数据,函数就是对象的行为,函数也成为方法。

Python中的对象

在Python的对象模型中,有两种对象:类对象和实例对象。类对象是用 class 语句创建的,而实例对象是在调用类的时候创建的。所以类对象只有一个,而实例对象可以有多个。

类对象

  • 执行 class 语句创建一个类对象和一个变量;
  • 类中的赋值语句创建的变量是类的数据属性,在类中的顶层赋值语句创建的变量才属于类属性;
  • 类中定义的 def 语句的函数是类的方法属性;
  • 类的数据和方法和所有实例对象共享。

实例对象

  • 实例对象通过调用类对象来创建;
  • 每个实例对象继承类对象的属性,并获得自己的命名空间;
  • 实例对象可以拥有“私有”属性。类的方法函数的第一个参数默认为 self,表示引用方法的对象实例。在方法中地域 self 的属性赋值才会创建术语实例对象的属性

[^]: 摘自《python3基础教程》侵删 。这个是本文作者看了诸多教材后,从中对比出最简单理解的一版。肯定还是很枯燥,但如果是零基础的读者还是要硬着头皮看完再看后面的内容。

定义类

基本格式如下代码:

class Student:    #创建了一个名为Student的类,我们约定类的首字母大写。
    data = 200    #在此,我们定义了类的属性.
    def set_name(self,name):   #用def语句定义了类的方法
        self.name =  name
    def show_name(self):
        return self.name
    print("类Student创建完成")         

调用类

type(Student)  #首先我们检查一下我们类的类型,返回type
Student.data   #调用了类的属性,返回200
Student.set_name() #试图调用类的方法,会直接报错。类的方法并不能直接调用,只能通过实例对象调用。
#正确调用类方法的姿势如下:
banji1 = Student()  #创建一个实例对象banji1
banji1.set_name("amy")       #传入参数
banji1.show_name()           #调用方法,显示实例对象属性值,返回'amy'

banji2 = Student()  #创建另一个实例对象banji2
banji2.set_name('tom')       #传入参数
banji2.show_name()           #调用方法,显示实例对象属性值,返回'tom'。从这可看出,实例对象属性之间没有什么关系。

banji1.data,banji2.data      #返回(200, 200),访问了共享属性

对象的属性

在Python中,实例对象继承了类对象的所有属性和方法,可以用dir()函数查看

dir(Student)
dir(banji1)
#这个代码返回信息太长,可以自行运行查看一下。以双下划綫开头结尾的变量名术语内置属性,最后我们可以看到来自Student类对象的data、set_name、show_name三个属性。

共享属性

类对象的数据属性是全局的,改变类对象的属性,实例对象引用时也会被改变。实例对象的数据属性更改不影响其他实例对象或者类对象。

banji3 = Student()  #创建Student的实例对象,并用banji3引用该对象
banji4 = Student()  #创建Student的实例对象,并用banji4引用该对象

print(Student.data,banji3.data,banji4.data) #返回200 200 200

Student.data = 100  #改变全局变量属性
print(Student.data,banji3.data,banji4.data) #返回100 100 100,实例对象属性跟随改变

banji3.data = 400   #更改实例变量的data属性赋值
print(Student.data,banji3.data,banji4.data) #返回100 400 100,实例对象属性改变,不影响他人

实例对象可以拥有私有属性

“私有”强调属性只属于当前实例对象,对其他实例对象是不可见的。

banji5 = Student()  #创建Student的实例对象,并用banji5引用该对象
# banji5.set_name()   #试图访问实例对象的属性,结果报错显示并不存在

banji5.set_name("john")  #调用类的对象方法为属性赋值
banji5.show_name()       #返回"john"

类的私有属性

如果想要类的方法或者属性成为私有的,不能通过实例对象引用,只需要在期名称以两个下划线开头即可。如下例:

class Secret:
    def __invisible(self):
        print("you can't see")
    def visible(self):
        print("what you can not see is:")
        self.__invisible()
#这样创建,我们就不能从外部访问__invisible,但是可以通过invisible访问

s = Secret()
# s.__invisible()  #试图从外部访问,直接报错
s.visible()      #访问成功,返回what you can not see is: you can't see

#其实,在类定义中,所有以两下划线开头的名称都被进行了转化,就是加了个下划线和类名
dir(Secret)     #用dir查看,我们发现列表中有'_Secret__invisible',知道这个以后,我们可以从外部访问类的私有对象了
s._Secret__invisible()  #成功返回you can't see。但这中操作并不正规

魔法函数init

又名构造函数,在调用类创建实例对象时自动被调用,不需要手动调用。

class Boy(object):
    def __init__(self):
    #方法,用来做变量初始化或赋值操作,在类实例化对象的时候,会被自动调用
        self.name = "yyg"
        self.height = "180"
        self.weight = "170"
    
    def info(self):
        print("我叫{},身高{},体重{}".format(self.name,self.height,self.weight))

    def show(self):
        """实例方法"""
        print("你的嘤嘤怪以上线")

boyfriend = Boy()

# 只需要调用实例方法info(),即可获取数据
boyfriend.info() #返回我叫yyg,身高180,体重170
boyfriend.show() #返回你的嘤嘤怪以上线

上一篇:Python基础笔记4-函数编写与传参方式
下一篇:Python基础笔记6-那些被遗忘又好用的函数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342