Python面向对象—对象|类

1、对象

说明
(1)英文"Object",表示任意存在的事物。
(2)在Python中,一切皆对象,具体的事物、字符串、函数等都是对象,即python天生就是面向对象的。

2、类

2.1、说明

在python中,类表示具有相同属性和方法的集合。在使用类时,需要先定义类、创建类的实例,通过类的实例就可以访问定义的类中的属性和方法了。

2.2、定义类

语法格式
	class ClassName:
'''帮助信息'''
	statement

参数说明:
ClassName:用于指定类,一般哟以大写字母开头,如果类名中有2个单词,第2个单词首字母也大写,这种命名方式叫"驼峰式命名法",是惯例。
'''帮助信息''':用于指定类文档的描述信息。定义该字符串后,在创建类的对象时,输入类名和左边"("后,将会显示该信息。
statement:类体,主要由类变量(或类成员)、方法、属性等定义语句组成。

	案例
定义一个大雁类:
class Geese:
	'''大雁类'''
	pass

2.3、创建类的实例

语法格式
ClassName(parametterlist)
参ClassName:必选参数,用于指定具体的类。
parametterlist:可选参数,当没有创建__init__()方法 或__init__()只有一个self参数时,可以省略。

案例
创建Geese类的实例:
wildGoose = Geese()
print(wildGoose)

输出:<__main__.Geese object at 0x000001C73C15D908>
执行上面的代码可见wildGoose是Geese类的实例。

2.4、创建__init__()方法

说明
(1)在创建类后,类通常会自动创建一个__init__()方法,这是一个特殊的方法,类似Java语言里的构造方法。
(2)每当创建一个类的新实例时,Python都会自动执行它。
(3)__init__()方法必须包含一个self参数,且必须时第一个参数。
(4)self参数是一个指向实例本身的引用,用于访问类中的属性和方法。
(5)在方法调用时会自动传递实际参数self,因此,当__init__()方法只有一个self参数时,在创建类的实例时,就不需要指定实际参数了。
(6)在__init__()方法中,除了self参数外,还可以自定义一些参数。

说明:在__init__()方法的名称中,开头和结尾处是2个下划线,这是一种约定,意在区分python默认方法和普通方法。

案例
以大雁为例声明一个类,并创建__init__()方法,代码如下:
class Geese:
	'''大雁类'''
	def __init__(self):	#构造方法
		print("这是大雁类!")
wildGoose = Geese()	#创建类 的实例...这个实例不需要指定实际参数,因为__init__()方法只有一个参数。

输出
这是大雁类!

案例
以大雁为例声明一个类,并创建__init__()方法,代码如下:
class Geese:
	'''大雁类'''
	def __init__(self,beak,wing,claw):	#构造方法
		print("这是大雁类!它有以下特征:")
		print(beak)
		print(wing)
		print(claw)
beak1 = "嘴巴大"
wing1=  "翅膀长"
claw1=  "爪子尖"
wildGoose = Geese(beak1,wing1,claw1)	#创建类 的实例...这个实例不需要指定实际参数,因为__init__()方法只有一个参数。
输出:
这是大雁类!它有以下特征:
嘴巴大
翅膀长
爪子尖

2.5、创建类的成员并访问

2.5.1、创建实例方法并访问
说明
(1)实例方法是指在类中定义的函数,是一种在类的实例上操作的函数。
(2)同__inot__()方法一样,实例方法的第一个参数必须是self,且必须包含一个self参数。
(3)实例方法和python中的函数的主要区别:函数实现的是某个独立的功能,实例方法 实现的是类中的一个行为,是类的一部分。
	
语法格式
def functionName(self,parameterlist):
	block

参数说明:
functionName:用于指定方法名,一般用小写字母开头。
self:必要参数,表示类的实例,其名称可以是self以外的单词,使用self只是一个惯例。
parameterlist:用于指定self以外的参数。
block:方法体,实现的具体功能。

访问
语法格式
instabceName.functionName(parametervalue)

参数说明:
instabceName:类的实例名称
functionName:要调用的方法名称
parametervalue:为方法指定对应的实际参数,其值的个数为parametelist的个数减1。

2.5.2、创建数据成员并访问

类属性
说明
(1)类属性是指定义在类中,并且在函数体外的属性。
(2)类属性可以在类的所有实例之间共享值,也就是在所有实例化的对象中共用。
(3)类属性可以通过类名或实例名访问。

案例
	定义一个大雁类Geese,在类中定义3个类属性,用于记录雁类的特征,代码如下:
class Geese:
	'''雁类'''
	neck = "脖子长"		#类属性
	wing = "翅膀长"		#类属性
	leg	 = "腿很长"		#类属性

def __init__(self):		#实例方法
	print("这是大雁类!它有以下特征:")
	print(Geese.neck)	
	print(Geese.wing)
	print(Geese.leg)
geese = Geese()			#实例化

输出:
这是大雁类!它有以下特征:
脖子长
翅膀长
腿很长

实例属性
说明
(1)实例属性是指定义在方法中的属性,只作用于当前实例中。
(2)实例属性只能通过实例名访问。如果通过类名访问实例属性会抛出异常。
(3)实例属性也可以通过实例名称修改。

案例
	定义一个大雁类Geese,在类的__init__()方法中定义3个实例属性,用于记录雁类的特征,代码如下:
class Geese:
	'''雁类'''

def __init__(self):			#实例方法
	self.neck = "脖子长"		#实例属性
	self.wing = "翅膀长"		#实例属性
	self.leg = "腿很长"		#实例属性

	print("这是大雁类!它有以下特征:")
	print(self.neck)	
	print(self.wing)
	print(self.leg)
geese = Geese()			#实例化

输出:
这是大雁类!它有以下特征:
脖子长
翅膀长
腿很长

案例
class Geese:
'''雁类'''

def __init__(self):			#实例方法
	self.neck = "脖子长"		#实例属性
	print(self.neck)

geese1 = Geese()			#实例化
geese2 = Geese()			#实例化
geese1.neck = "没有天鹅的长"
print("geese1的属性:",geese1.neck)
print("geese1的属性:",geese2.neck)

输出:
脖子长
脖子长
没有天鹅的长
脖子长

2.6、访问限制

说明
(1)在类的内部可以定义属性和方法,而在类的外部则可以直接调用属性或方法来操作数据,从而隐藏了类内部的复杂逻辑。
(2)但是在Python中,并没有对属性和方法的访问权限进行限制,。为了保证类内部的某些属性或方法不被外部所访问,可以在属性或方法名前面添加单下画线、双下画线、首位双下画线,从而限制访问权限。

	(1)单下画线
		_foo
			表示protected(保护)类型的成员,只允许类本身和子类进行访问,但不能使用"from module import*"语句导入。保护属性可以通过实例名访问。
			
	(2)首尾双下画线
		__foo__
			表示定义特殊方法,一般是系统定义名字,如__init__()。
			
案例
 创建一个Swan类,定义保护属性_neck_swan,并在__init__()方法中访问该属性,然后创建Swan类的实例,并通过实例名输出保护属性_neck_swan,代码如下:
class Swan:
        '''天鹅类'''
        _neck_swan = '脖子长'      #定义私有属性
        def __init__(self):
                print("__init__():",Swan._neck_swan)    #在实例方法中访问私有属性
swan = Swan()
print("直接访问:",swan._neck_swan)		#保护属性可以通过实例名访问
#输出:
__init__():脖子长
直接访问:脖子长

	(3)双下画线
		__foo
表示private(私有)类型成员,只允许定义该方法的类本身进行访问。
可以通过"类名.属性名"方式访问。
可以通过"类的实例.类名__xxx"方式访问。
不能通过类的实例即实例名.属性进行访问。

案例
创建一个Swan类,定义私有属性__neck_swan,并在__init__()方法中访问该属性,然后创建Swan类的实例,并通过实例名输出私有属性_neck_swan,代码如下:
class Swan:
        '''天鹅类'''
        _neck_swan = '脖子长'      #定义私有属性
        def __init__(self):
                print("__init__():",Swan.__neck_swan)    #在实例方法中访问私有属性
swan = Swan()
print(swan._Swan__neck_swan)		#私有属性可以通过实例名.类名__xxx访问
print(swan.__neck_swan)				#私有属性不能通过实例名访问,报错
#输出:
脖子长
报错...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

卢同学.

但行好事 莫问前程

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

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

打赏作者

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

抵扣说明:

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

余额充值