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-那些被遗忘又好用的函数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只想上天的熊猫酱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值