主要内容
1. 实例的属性和方法
2. 类的属性和方法
3. 类的静态属性和方法
4. 类的私有属性和方法
5. 运算符重载
使用样例
import time
class User:
# 类属性userid,和实例属性self.userid是两个不同范围的变量
userid = 'wang'
# 构造方法:
# 1.self指代当前类的实例,且位于__init__第一个参数,其他参数作为构造参数
# 2.self是一种规范,也可用其他合法变量名
def __init__(self, userid, password):
self.userid = userid
# 私有属性
self.__password = password
# 访问私有方法
self.__test()
print('访问类属性:', self.usertotal)
# 访问类属性: -11
# 用过类名修改类属性
User.usertotal += 1
# 以下创建实例变量usertotal,与类变量同名,区别:
# 1.这是两个不同范围的变量
# 2.这里读取同名类变量usertotal为self.usertotal初始化,相当于:self.usertotal = User.usertotal + 1
# 3.并不会修改 User.usertotal的值
self.usertotal += 100
# 用类名访问静态方法
print('构造方法:', User.getDate())
# 构造方法: 2020-05-27
# 实例的方法
def info(self):
print(self.userid, self.__password)
# 类属性
usertotal = -11
# 类方法:
# 1.使用修饰器 @ classmethod标识
# 2.在类外通过对象名调用,又可通过类名调用
# 3.不能访问实例属性,可以访问类属性
@classmethod
def printUsertotal(cls):
print(cls.usertotal)
# 静态方法:
# 1.用@staticmethod标识
# 2.与类没有直接关系,相当于普通函数
# 3.没有self参数,无法访问类的实例属性
# 4.没有cls参数,无法访问cls的属性
# 5.只能使用通过类名调用
@staticmethod
def getDate():
print('静态方法:', User.usertotal)
dd = time.localtime()
dstr = time.strftime("%Y-%m-%d", dd)
return dstr
# 私有属性和方法:
# 1.双下划线开头的属性是私有属性
# 2.双下划线开头的方法是私有方法
# 3.只能在类内部使用
def __test(self):
print(self.userid, self.__password)
# 把一个类的实例变成 str,需要实现方法__str__()
def __str__(self):
return 'User类:' + str(self.usertotal) + '\t' + str(self.userid) + '\t' + str(self.__password)
# 运算符重载,用于比较对象
# 重载的还有很多用法:"==":___e__, ">=":__ge__, ">":__gt__, "<=":__le__, "<":__lt__
def __eq__(self, other):
print('other:', other.__password)
return self.userid == other.userid and self.__password == other.__password
# return self.userid is other.userid and self.__password is other.__password
def usertest():
# 实例化一个类
user = User('zhang', '123456')
user.info()
User.printUsertotal()
print('类变量usertotal:', User.usertotal)
# 类变量usertotal: 1
print('实例变量usertotal:', user.usertotal)
# 实例变量usertotal: 101
print(User.getDate())
# 2020-05-27
print(user.userid)
# zhang
print(User.userid)
# wang
print(user)
# User类:90 zhang 123456
other = User('zhang', '1234567')
print(user == other)
if __name__ == '__main__':
usertest()