python编程之路——类和对象

一、类的用法

1.1 类的构造

类即类别、种类,是面向对象设计最重要的概念,对象是特征和技能的结合体,而类是一系列对象相似的特征与技能的结合体。

在程序中,务必保证先定义类,后产生对象。

类和函数的使用是类似的,先定义函数,后调用函数,类也一样。在程序中先定义类,后调用类。不一样的是,调用函数会执行函数体代码返回的是函数执行的结果,而调用类会产生对象,返回的是对象。

定义类,使用关键字class + 空格 + 类名,类名用大驼峰命名,变量名推荐使用“_”这种方式就是为了区分。

class DeepshareStudent:
	# 用变量名表示特征
	school = 'deepshare'
	# 用函数表示技能
	def learn(self):
	    """
	    self是使用pycharm自动添加的,写成xxx也是一样的,就是一个位置参数,必须被传值。
	    """
	    print('is learning')
    print('=====>')
  • 类是特征与技能的结合体,所以类中最常见的就是变量和函数,但是类中也可以有任意的python代码;
  • 执行以上代码,会发现会打印一行箭头,这就说明这段代码运行了,这说明在定义类的阶段会立刻执行类体内的代码;
  • 既然执行了代码,有变量有函数,那就会将产生的名字存放于类的名称空间;

1.2 类的查看

使用类型.__dict__方法可以查看类的函数和变量;

name_and_func = DeepshareStudent.__dict__
print(name_and_func)
# 输出
"""
{
	'__module__': '__main__', 
	'school': 'deepshare', 
	'learn': <function DeepShare.learn at 0x000002764C2F1D08>, 
	'__dict__': <attribute '__dict__' of 'DeepShare' objects>, 
	'__weakref__': <attribute '__weakref__' of 'DeepShare' objects>, 
	'__doc__': None}
"""

注意这是一个字典的格式,因为有名字有内存地址,这是一一对应的关系,最合适使用字典存储;

print(name_and_func['school'])
print(name_and_func['learn'])
# 执行代码输出
"""
deepshare
<function DeepShare.learn at 0x000002764C2F1D08>
可以看到name_and_func['learn']是一个函数的内存地址,那么加(0应该就能调用
"""
#执行以下代码
name_and_func['learn']()

# 结果报错了,错误类型说learn()这个函数少了一个位置参数‘self’,在learn函数中,位置参数self必须被传值。代码可以改为
name_and_func['learn']('albert')

在类的函数中,self指的是类的对象本身。

每次想拿到类的函数或者变量的时候可以使用上面的方法,但是这样很麻烦,可以使用下面的方法:

DeepshareStudent.school
DeepshareStudent.learn

1.3类的修改

# 修改类的属性值
DeepshareStudent.school = 'zzz'

# 给类添加属性
DeepshareStudent.country = 'china'

# 删除类的属性
del DeepshareStudent.country

二、对象的用法

面向对象的核心是对象,当把类造出来,类相当于一个模板或者是工厂,接下来需要使用类批量生产对象。

定义类

class DeepshareStudent:
	school = 'deepshare'
	def learn(self):
	    print('is learning')

调用类的方式和调用函数一样,类后面加括号;

DeepshareStudent()
# 执行代码没有任何结果

调用类的同时会产生对象,只需要把它赋值给对象就可以了

stu1 = DeepshareStudent()
stu2 = DeepshareStudent()
stu3 = DeepshareStudent()

每调用一次,类的模板就会加工一个对象,但是这么做加工出来的对象没有区别,每次得到的对象是一样的,但实际上我们需要的对象肯定不是完全一样的。这时候我们需要一个def init()函数。init()函数在产生对象的时候会被自动执行,从而可以给对象中的变量进行赋值。

def __init__(self,x,y,z):
    self.NAME = x
    self.AGE = y
    self.GENDER = z

这样就实现了我们的需求,因此类可以写为:

class DeepshareStudent:
	school = 'deepshare'
	def __init__(self,name,age,gender):
		self.name = name
		self.age = age
		self.gender = gender
	def learn(self):
	    print('is learning')

这样创建的类既有公共属性又有私有属性。注意self是对象本身,它是在调用类产生对象时自动传值的。写代码时pacharm会自动添加这个self,也可以写为其它变量名,例如aaa,不过意义不明确,但是不写是不行的。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值