Python基础系列七:面向对象

1275-李同学

发表文章数:25

首页 » Python » 正文

类和对象

类:定义数据(属性)和行为(方法),
对象:类的实例

## 定义类
class Student:
	def __init__(self,name,age):
		self.name = name
		self.age = age
	def show(self):
		print ("name:{0},age:{1}".format(self.name,self.age))
## 声明对象
stu = Student('jack','25')
stu.show()

1. 构造函数

构造函数:_init_(),用来初始化对象。创建对象时先调用类的_new_()方法创建对象,然后调用_init_()方法初始化对象。
_init_()函数第一个参数必须是self,self指的就是当前对象。
构造函数没有返回值.

2. 实例属性

实例属性是从属于实例对象的属性,也称为"实例变量"。他的使用有以下几个要点:

  1. 实例属性一般在__init__()方法中通过如下代码定义:

    self.实例属性名=初始值
  2. 在本类的其他实例方法中,也是通过self进行访问

    self.实例属性名
  3. 创建实例对象后,通过实例对象访问属性

3. 实例方法

定义实例方法时,第一个参数必须是self,self指的是当前实力对象
调用实例方法时,不需要给self传参,self由解释器自动传参。

## 定义类
class Student:
	def __init__(self,name,age):
		self.name = name
		self.age = age
	def show(self):
		print ("name:{0},age:{1}".format(self.name,self.age))
## 声明对象
stu = Student('jack','25')
stu.show()
## 等价于
Student.show(stu)

4. 其他操作

dir(obj):可以获得对象的所有属性和方法
obj.dict:对象的属性字典
pass : 空语句
isinstance(对象,类):判断对象是不是属于类

class Student:
	def __init__(self,name,age):
		self.name = name
		self.age = age
	def show(self):
		print ("name:{0},age:{1}".format(self.name,self.age))
## 声明对象
stu = Student('jack','25')
print(dir(stu))
print(stu.__dict__)
print(isinstance(stu,Student))

5. 类对象

类对象:“class 类名”,当解释器执行class语句时,就会创建一个类对象。类对象的类型是type

class Student:
	pass
## 声明对象
print(type(Student))
Stu = Student
s1 = Stu() #创建对象
print(id(s1 ))

6. 类属性

类属性:从属于“类对象”的属性,也成为“类变量”。类属性可以被所有实例对象共享。类属性通过以下方式定义


class 类名:类变量名=初始值
在类的外面通过“类名.类属性”方式访问。

class Student:
	company = "future"
	card_no = 0
	def __init__(self,name,age):
		self.name = name
		self.age = age
		Student.card_no +=1
	def show(self):
		print ("name:{0},age:{1},no:{2}".format(self.name,self.age,Student.card_no))
## 声明对象
stu1 = Student('jack','25')
stu1.show()
stu2 = Student('rose','22')
stu2.show()
print(Student.card_no)

其中对象stu1在内存中的存储如下图所示

Python基础系列七:面向对象

7. 类方法

类方法:从属于“类对象”的方法。类方法通过@classmethod来定义,格式如下:

	@classmethod
	def 类方法名(cls[,形参列表]):
		函数体

类方法的定义需要注意以下几点

  1. @classmethod必须位于方法上面一行
  2. 第一个cls必须有,cls指的就是“类对象”本身
  3. 调用类方法格式:“类名.类方法名(参数列表)”,参数列表不需要也不能给cls传值
  4. 类方法中不能访问实例属性和实例方法
  5. 子类继承父类时,传入cls是子类对象,而不是父类对象。
class Student:
	company = "future"
	card_no = 0
	def __init__(self,name,age):
		self.name = name
		self.age = age
		Student.card_no +=1
	@classmethod
	def printCompany(cls):
		print (cls.company)
	def show(self):
		print ("name:{0},age:{1},no:{2}".format(self.name,self.age,Student.card_no))
## 声明对象
stu1 = Student('jack','25')
stu1.show()
stu1.printCompany()

Python基础系列七:面向对象

8. 静态方法

静态方法:与“类对象”无关的方法。静态方法通过@staticmethod来定义,不操作类的属性,和普通函数的功能一样,只是定义在了类中。

	@staticmethod
	def 静态方法名(参数列表):
		函数体

类方法的定义需要注意以下几点

  1. @staticmethod必须位于方法上面一行
  2. 调用类方法格式:“类名.静态方法名(参数列表)”
  3. 类方法中不能访问实例属性和实例方法
class Student:
	company = "future"
	card_no = 0
	def __init__(self,name,age):
		self.name = name
		self.age = age
		Student.card_no +=1
	@classmethod
	def printCompany(cls):
		print (cls.company)
	@staticmethod
	def add(a,b):
		sum = a+b
		print (sum)
		return sum
	def show(self):
		print ("name:{0},age:{1},no:{2}".format(self.name,self.age,Student.card_no))
## 声明对象
stu1 = Student('jack','25')
stu1.show()
stu1.printCompany()
Student.add(1,2)

9. __call__方法和可调用对象

定义了__call__方法的对象,成为"可调用对象",即该对象像函数一样被调用。

class Student:
	company = "future"
	card_no = 0
	def __call__(self,name,age):
		self.name = name
		self.age = age
	def show(self):
		print ("name:{0},age:{1},no:{2}".format(self.name,self.age,Student.card_no))
## 声明对象
stu1 = Student()
stu1('jack','25')
stu1.show()

拜师教育学员文章:作者:1275-李同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《Python基础系列七:面向对象》 发布于2020-09-15

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录