一、创建类
格式:class 类名([父类])
属性与方法定义
父类缺省时为object。
二、类属性与对象属性
1、类属性:在类的内部、类的所有方法的外部定义的属性,为类属性。
2、对象属性:在类的方法内定义的属性,为对象属性。如:
class Student( ):
studentNum=0
def __init__(self,name,age):
self.name=name
self.age=age
其中:studentNum为类属性,name和age均为对象属性。
3、类可以读写类属性,对象只能读类属性。如:
Student.studentNum=1
print(Student.studentNum)
st1=Student("xiaoming",18)
print(st1.studentNum)
4、类属性可以通过类名创建。如:Student.ID="A01"
5、对象属性可以通过对象创建。如:st1.xh="B03"
6、对象属性与类属性同名时,对象将无法读取类属性。如:
st1.studentNum=3 #由对象创建了一个与类属性同名的对象属性
print(st1.studentNum,Student.studentNum) #输出二个不同的值
7、对象属性只能由对象读写,类不能读写对象属性。
三、公有属性与私有属性
1、私有属性:以双下划线开头的属性。只能在类内部访问。外部不能读写。如:
class Student( ):
studentNum=0
__locked=0
def __init__(self,name,age):
self.name=name
self.age=age
其中__locked为私有属性。
2、公有属性:除私有属性外,其他属性均为公有属性。
上例中,studentNum、name、age均为公有属性。
四、类方法与对象方法
1、在类的定义中,使用关键字@classmethod声明,且第一个参数为cls的方法是类方法。
2、未使用关键字@classmethod声明,第一个参数为self的对象方法是对象方法。如:
class Student( ):
studentNum=0
def __init__(self,name,age):
self.name=name
self.age=age
Student.studentNum+=1
def show(self):
print(self.name,self.age)
@classmethod
def see(cls):
print(cls.studentNum)
其中:__init__、show均为对象方法,see为类方法。
3、类方法可由类和对象调用。对象方法只能由对象调用。
五、公有方法与私有方法
1、类的定义中,以双下划线开头命名的方法为私有方法,否则为公有方法。
2、公有方法可由外部调用,私有方法只能由类内部调用。如:
class Student( ):
def __init__(self,name,age):
self.name=name
self.age=age
def __show(self):
print(self.name,self.age)
def see(self):
self.__show( )
其中:show为私有方法,see为公有方法。
3、应用说明:
st=Student("xiaoming",18)
st.see( ) #正确调用
st.show( ) #错误调用
st.__show( ) #错误调用
六、构造函数与析构函数
1、类的构造方法是指命名为“__init__”的方法。第一个参数必须是self。如:
class Student( ):
def __init__(self):
self.name=name
self.age=age
2、构造方法在创建类的实例时自动运行。
3、可以为构造方法指定其他参数。如:
class Student():
def __init__(self,name,age):
self.name=name
self.age=age
这时,在实例化时可传递参数。如:st=Student("张三",18)
4、析构方法是指命名为“__del__”的方法,第一个参数必须是self。
5、析构方法在类的实例被删除时自动运行。如:
class Student( ):
studentNum=0
def __init__(self,name,age):
self.name=name
self.age=age
Student.studentNum+=1
def __del__(self):
Student.studentNum-=1
说明:
---创建类的实例时,类属性studentNum自动增加1
---删除类的实例时,类属性studentNum自动减少1
---可由下面的代码测试:
st1=Student("xiaoming",18)
st2=Student("zhaoji",19)
print(Student.studentNum)
del st2
print(Student.studentNum)

