类描述:在类定义后首行,以独立字符串形式定义
定义后通过 类名.__doc__
属性访问。
class DemoClass:
"This is a demo for python class"
pass
print(DemoClass.__doc__)
输出:This is a demo for python class
类定义完成后,默认生成一个类对象(第一个数据结构)
每个类唯一对应一个类对象,用于存储这个类的基本信息
类对象是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使用预定义的__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
老王 老李
实例方法
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
类的类方法
类方法是与类对象相关的函数,由所有实例对象共享
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
静态方法是定义在类中的普通函数,能够被所有实例对象共享
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)
输出:
老王
再见 老王