类
class MyString:
str ="xiaoming"
def output(self):
print(self.str)
s = MyString()
s.output()
print(s.str)
构造函数
class Myname:
。def __init__(self): #构造函数
self.name ="xiaoming"
def __del__(self): #析造函数
print("byebye~")
def prf(self):
print(self.name)
del ps 删除对象
析构函数有一个固定的名称,__del__().通常在析构函数中释放类所占用的资源。使用del删除一个对象,释放它所占用的资源
静态方法无需传入self参数,因此在静态方法中无法访问实例变量。
在静态方法中不可以直接访问类的静态变量,但可以通过类名引用静态变量。
因为静态方法既无法访问实例变量,也不能直接访问类的静态变量,所以静态方法与定义它的类没有直接关系,而是起到了类似函数工具库的作用
类方法
类方法与静态方法一样,可以使用类名调用类方法
类成员方法也无法访问实例变量,但可以访问累的静态变量
类方法需传入代表本类的cls参数
可以使用@classmethod定义类方法
#类方法
class myname:#定义类
val1 ="string 3"#静态变量
def __init__(self):
self.val2 ='value 2'
@ classmethod #类方法
def classmd(cls):
print('类' +str(cls) +',val1:' +cls.val1 +'无法访问val2的值')
可以通过对象名调用类方法,也可以通过类名调用类方法。
类方法有一个参数cls,代表定义类方法的类,可以通过cls访问类的静态变量。
使用isinstance()函数判断对象类型,返回True/False
print(isinstance(c,MyClass))
类的继承和多态
#类的继承和多态
import time
class Users:
username =""
def __init__(self,uname):
self.username = uname
print("(构造函数:"+self.username+')')
#显示用户名
def dispUserName(self):
print(self.username)
class UserLogin(Users):
def __init__(self,uname,lastLoginTime):
Users.__init__(self,uname)#调用父类Users的构造函数
self.lastLoginTime = lastLoginTime
def dispLoginTime(self):
print("登录时间为:"+self.lastLoginTime)
#获取当前时间
now = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
抽象类和多态
抽象类是包含抽象方法的类,而抽象方法不包含任何实现的代码,只能在其子类中实现抽象函数的代码。
定义抽象类:需要从类库abc导入ABCMeta类和abstractmethod类
from abcimport ABCMeta,abstractmethod
实现抽象类:可以从抽象类派生子类。方法与普通类的派生和继承一样
多态:是指抽象类中定义的一个方法,可以在其子类中重新实现,不同子类中的实现方法也不相同
#抽象类
class Shape(object):
__metaclass__ = ABCMeta
def __init__(self):
self.color ='black'#默认使用黑色
@abstractmethod
def draw(self):pass
class circle(Shape):
def __init__(self,x,y,r):#定义圆心坐标和半径
self.x = x
self.y = y
self.r = r
def draw(self):
print("Draw Circle:(%d,%d,%d)" %(self.x,self.y,self.r))
class line(Shape):
def __init__(self,x1,y1,x2,y2):#定义起止坐标值
self.x1 = x1
self.y1 = y1
self.x2 = x2
self.y2 = y2
def draw(self):
print("Draw Line:(%d,%d,%d,%d)" %(self.x1,self.y1,self.x2,self.y2))
在不同的子类中,抽象方法draw()有不同的实现,这就是类的多态
网友评论