由于我先学的C和java,现在学到python的类有一些不同,在此做一些学习笔记。
申明一个类:
class 类名:
成员变量
成员函数
特别需要注意类名后面的冒号!
成员函数
示例:
class Person:
def disname(self):
print('我叫小明')
在上面代码中定义了一个Person类,它有一个成员方法,功能是打印 ‘我叫小明’,python和C中对成员函数定义稍有不同:
可以看到参数列表里有一个self参数,在python中,成员函数的参数列表必须有一个self参数且在参数列表的 开头,它表示的是实例化的对象本身,可以使用self引用类的属性和和成员函数
构造函数
在python中,构造函数有一个固定的名字(不像c中就是类名),即 _init_ (函数名是以两个下划线开头和两个下划线结尾)
继续上面的示例,加入一个构造函数:
class Person:
def __init__(self):
print("这是构造函数")
def disname(self):
print('我叫小明')
析构函数:
python中的析构函数也是固定的名字,即__del__
成员变量
python中的成员变量分为公有变量和私有变量(不像java中的三种)
公有变量定义的方法有两种,一种在类中,一种在类中的构造方法中:
继续修改上面的Person类:
class Person:
count = 0 # 在类中创建公有变量
def __init__(self, name):
self.username = name # 在构造方法中创建公有变量
print("这是构造函数")
def disname(self):
print(self.username)
从注释可以了解到两种创建公有变量的方法,他们都是公有变量,但是也有所不同:
在类中创建的公有变量一般直接就赋值了(好像也必须要赋值),而在构造方法中的公有变量一般通过传参赋值。
还有一个很重要的区别,我先说说静态变量:
python中的静态变量不需要显示的定义(在java中是需要使用static关键字),任何在类中定义的公有变量(不是在构造方法中)都可以作为静态变量,可以通过类名来使用:
在上面代码的基础上添加的:
person.count #普通成员变量
Person.count #使用静态变量count,在构造方法中创建的公共变量是不能这么做的。
虽然只创建了一个count,但是通过类名和对象名引用count时,访问的实例是不同的,且是 不互相干扰的。
再说下私有变量,在python中使用下划线作为变量前缀和后缀来制定特殊变量:
_xxx_ 开始和结尾分别是两个下划线,它表示的是系统定义名字
__xxx 表示类中私有变量名
之前说了静态变量,现在说下静态方法的不同:
1.python 中静态方法不用传入self参数,因此在静态变量中是无法访问实例变量的
2.静态方法中无法直接访问类的静态变量,但是可以通过类名引用静态变量
静态变量既无法访问实例实例变量,也无法直接访问静态变量,所以静态方法与定义它的类没有直接关系,而是起到了类似函数工具库的作用。
使用@staticmethod定义静态方法
eg:
@staticmethod
def 静态方法名称():
方法体
另外python有一个类方法
它与静态方法比只多了个可以访问静态变量,它需要传入代表本类的cls参数,可以通过cls访问类的静态变量
使用装饰符@classmethed定义类方法
@classmethed
def 类方法名(cls):
方法体
可以使用isinstance()判断对象类型,返回true或false
isinstance(对象名,类名或类型名)