python面向对象之类的构建

类的构建

类的名字:建议大写单词的组合。

类描述:在类定义后首行,以独立字符串形式定义
定义后通过 类名.__doc__属性访问。

class DemoClass:
	"This is a demo for python class"
	pass
print(DemoClass.__doc__)
输出:This is a demo for python class

类对象:Class Object

类定义完成后,默认生成一个类对象(第一个数据结构)
每个类唯一对应一个类对象,用于存储这个类的基本信息

类对象是type类的实例,表达为type类型

class DemoClass:
	"This is a demo for python class"
	print("hello demo class")
print(DemoClass.__doc__)
print(type(DemoClass))
输出:
hello demo class(自动生成)
This is a demo for python class
<class 'type'>

通过创建实例对象(instance object)使用类的功能

class DemoClass:
	"This is a demo for python class"
	print("hello demo class")
print(type(DemoClass))
cn=DemoClass()
print(type(cn))
输出:
hello demo class
<class 'type'>
<class '__main__.DemoClass'>

python 类的构造函数

  1. 类的构造函数用于从类创建实例对象的过程
  2. 类的构造函数为实例对象创建提供了参数的输入方式
  3. 类的构造函数为实例属性的定义和赋值提供了支持

类的属性:类中定义的变量,用来描述类的一些特性参数
类的方法:类中定义与类相关的函数,用来给出类的操作功能
属性和方法是类对外交互所提供的两种接口

python使用预定义的__init__()作为构造函数
class 类名:
	def __init__(self,参数列表)
		语句块
		...
class DemoClass:
    def __init__(self,name):
        print(name)
dc1=DemoClass('老王')
dc2=DemoClass('老李')
输出:
老王
老李

类的属性

类属性:类对象的属性,由所有实例对象所共享
实例属性:实例对象的属性,由各实例对象所独享

class DemoClass:
	count=0   #类对象的属性
	def __init__(self,name,age):
		self.name=name #实例对象的属性
		self.age=age
		DemoClass.count+=1
dc1=DemoClass("老王"45)
dc2=DemoClass("老李"51)
print('总数',DemoClass.count)
print(dc1.name,dc2.name)
输出:
总数 2
老王 老李

类的方法

  1. 实例方法:实例对象的方法,由各实例对象独享,最常用的形式
  2. 类方法:类对象的方法,由所有实例对象共享
  3. 自由方法:类中的一个普通函数,由类所在命名空间管理,类对象独享
  4. 静态方法:类中的一个普通函数,由类对象和实例对象共享
  5. 保留方法:由双下划线开始和结束的方法,保留使用,如__len__()

实例方法

class DemoClass:
	def __init__(self,name):
		self.name=name
	def lucky(self):
		s=0
		for c in self.name:
			s+=ord(c)%100
		return s
dc1=DemoClass("老王")
dc2=DemoClass("老李")
print(dc1.name,"的幸运数字是:",dc1.lucky())
print(dc2.name,"的幸运数字是:",dc2.lucky())
输出:
老王 的幸运数字是: 148
老李 的幸运数字是: 115

类的类方法
类方法是与类对象相关的函数,由所有实例对象共享

  1. 类方法至少包含一个参数,表示类对象,建议用cls
  2. @classmethod是装饰器,类方法定义所必须
  3. 类方法只能操作类属性和其他类方法,不能操作实例属性和实例方法
class DemoClass:
	count=0
	def __init__(self,name):
		self.name=name
		DemoClass.count+=1
	@classmethod
	def getChrCount(cls):
		s="零一二三四五六七八九十多"
		return s[DemoClass.count]

dc1=DemoClass("老王")
dc2=DemoClass("老李")
print(dc1.getChrCount())
print(DemoClass.getChrCount())
输出:
二
二

自由方法是定义在类命名空间的普通函数
(就是普通函数 类名.函数名 访问)

class DemoClass:
	count=0
	def __init__(self,name):
		self.name=name
		DemoClass.count+=1
	def foo():  #参数列表为空,只能操作类中的属性方法
		DemoClass.count*=100
		return DemoClass.count
de1=DemoClass("老王")
print(DemoClass.foo())#类.方法 访问
输出:
100

静态方法是定义在类中的普通函数,能够被所有实例对象共享

  1. 静态方法可以没有参数,可以理解为定义在类中的普通函数
  2. @staticmethod是装饰器,静态方法定义所必须
  3. 静态方法只能操作类属性和其他类方法,不能操作实例属性和实例方法
  4. 相比于自由方法,静态方法能够使用 类名和对象名 两种方式
class DemoClass:
	count=0
	def __init__(self,name):
		self.name=name
		DemoClass.count+=1
	@staticmethod
	def foo():  #参数列表为空,只能操作类中的属性方法
		DemoClass.count*=100
		return DemoClass.count
dc1=DemoClass("老王")
print(DemoClass.foo())
print(dc1.foo())
输出:
100
10000

保留方法
保留方法由双下划线开始和双下划线结束,保留使用(参数一般有self)对应某些函数

class DemoClass:
	count=0
	def __init__(self,name):
		self.name=name
		DemoClass.count+=1
	def __len__(self):
		return len(self.name)
dc1=DemoClass("老王")
dc2=DemoClass("小诸葛")
print(len(dc1))
print(len(dc2))
输出;
2
3

类的析构函数

python使用预定义的__del__()作为析构函数
class DemoClass:
	def __init__(self,name):
		self.name=name
	def __del__(self):
		print("再见",self.name)
dc1=DemoClass("老王")
del dc1
输出:
再见 老王

使用del 删除对象且对象被真实删除时调用析构函数__del__()

class DemoClass:
	def __init__(self,name):
		self.name=name
	def __del__(self):
		print("再见",self.name)
dc1=DemoClass("老王")
dc2=dc1
del dc1
print(dc2.name)
输出:
老王
再见 老王

你可能感兴趣的:(python,python,机器学习,编程语言)