Python学习笔记-面向对象

Python面向对象概述

类和对象是面向对象程序设计的两个重要概念。
类和对象的关系即数据类型与变量的关系,根据一个类可以创建多个对象,而每个对象只能是某一个类的对象。
类规定了可以用于存储什么数据,而对象用于实际存储数据,每个对象可存储不同的数据。

类的定义和创建实例

可以直接创建新的类,也可以基于一个或多个已有的类创建新的类;
们既可以创建一个空的类,然后再动态添加属性和方法,也可以在创建类的同时设置属性和方法。
类中的属性对应前面所学习的变量(实例),而类中的方法对应前面所学习的函数。
通过类,可以把数据和操作封装在一起,从而使得程序结构更加清晰,这也就是所谓的类的封装性。

class  类名:
	语句1
	语句2
	...
	...
	语句N

例:定义一个空类。
class Student: # 定义一个名字为Student的类
	pass  # 一个空语句,起到占位作用,表示Student类中没有任何属性和方法。

例:创建Student类对象。
Class Student:
	pass
	
if __name__=='__main__': 
	stu=Student()  # 创建Student类的对象,并将创建的对象赋给变量stu
	print(stu)  # 输出stu:<__main__.Student object at 0x000001523015BAC0>

注意:每次创建对象时,系统都会在内存中选择一块区域分配给对象,每次选择的内存通常时不一样的。因此,实际运行时会看到一个不同的stu对象地址。

类属性定义及其访问

定义类时指定类属性

class Student: # 定义Student类
	name='Unknown'  # 定义Student类中有一个name属性

对类属性的访问

既可以通过类名访问,也可以通过该类的对象访问。
类名.属性名 
对象名.属性名

例:类属性的访问示例。

class Student: # 定义Student类
	name='Unknown'  # 定义Student类中有一个name属性
if __name__=='__main__':
	stu1=Student() # 创建Studentl类对象stu1
	stu2=Student() # 创建Studentl类对象stu2
	print('第7行输出:stu1 %s,stu2 %s'%(stu1.name,stu2.name))
	Student.name='未知' # 将Student的类数下name赋值为未知'
	print('第9行输出:',Student.name)
	print('第10行输出:stu1%s,stu2%s'%(stu1.name,stu2.name))

stu1.name='李晓明'  # 将stu1的name属性赋值为'李晓明'
stu2.name='马红'   # 将stu2的name属性赋值为'马红'
print('第13行输出:',Student.name)
print('第14行输出:stu1%s,stu2%s'%(stu1.name,stu2.name))7行输出:stu1 Unknown,stu2 Unknown
第8行输出: 未知
第10行输出:stu1未知,stu2未知
第13行输出: 未知
第14行输出:stu1李晓明,stu2马红

为对象动态绑定新属性

Python作为一种动态语言,除了可以在定义类时指定类属性外,还可以动态地为已创建的对象绑定新的属性。
例:为对象绑定新属示例。
class Student: # 定义Student类
	name='Unknown'  # 定义Student类中有一个name属性
if __name__=='__main__':
	stu1=Student()
	stu2=Student()
stu1.age=19 # 为对象stu1动态绑定新的属性age。
print('stu1姓名:%s,年龄:%d'%(stu1.name,stu1.age)) #输出姓名和年龄

stu1姓名:Unknown,年龄:19

类中普通方法定义及调用

与普通函数定义一样,类中的方法在定义时也需要时使用def关键字(也可以有默认参数值)。
类中的方法分为两种,普通方法和内置方法。
	普通方法:需要通过类的实例对象根据方法名调用;
		实例对象名.方法名(实参列表)
	内置方法:是在特定情况下由系统自动执行

注意:类的普通方法必须通过实例对象调用,而不能通过类名直接调用。这是因为通过实例对象调用时会自动将该实例对象传给self,而通过类调用时则不会有这个隐含的参数传递。

普通方法定义和调用

第一个参数需要对应调用方法时所使用的实例对象(一般为self,但也可以改为其他名字)
class Student:
    name='Unknown'

    def SetName(self,newname,newid='Unknown'):  # 定义类的普通方法Setname且有一个默认参数newid
        self.name=newname # 将self对应实例对象中的name属性值赋为newname

    def PrintName(self):  # 定义类的普通方法Printname
        print('姓名:%s'%self.name)

if __name__=='__main__':
    stu1=Student()
    stu2=Student()
    stu1.SetName('李晓明')  # 实例对象名.方法名(实参列表),self就是实例对象stu1,而newname='李晓明'
    stu2.SetName('马红')

    stu1.PrintName()  # self=stu1
    stu2.PrintName()

私有属性

在定义类时,如果一个类属性名是以__(两个下划线)开头,则该类属性为私有属性。
在类内可以直接访问,而在类外无法直接访问的属性。那如果需要在类外访问私有属性怎么办?私有属性名前面加上"_类名"(stu._Student__id)。
class Student:
    name='未知' # 定义Student类中有一个name属性
    __id='未知' # 定义Student类中有一个__id私有属性
    def SetInfo(self,newname,newid):  #定义SetInfo方法
        self.name=newname
        self.__id=newid  # 将self对应实例对象的__id属性赋为newiid
    def 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值