#python面向对象编程
#类的创建
#类:具有共同特征的事件的集合
#例:人Person类
#类的定义
class Person:
def __init__(self): #类中的函数也称方法,此方法的名称为__init__构造方法,非普通方法
self.name='刘备' #形参self是必要的
self.gender='男'
self.weight='60'
print('An instance created')
#类的实例化
p1=Person()
print(p1.name)
print(p1.gender)
print(p1.weight)
#class Stu:
# __name="张三" #私有
#print("name的初始值是:",Stu.name)
#Stu.name="李四"
#print("name的现值是:",Stu.name)
#内置类属性
'''
__dict__ #属性
__doc__ #文档字符串
__name__ #类名
__module__ #类定义所在模块
__bases__ #类所有父类构成元素
'''
#创建类的对象实例
class Stu:
Name="张三"
age=19
stu=Stu() #创建对象
print("学生姓名:%s,年龄:%d"%(stu.Name,stu.age))
#构造方法实例
class Stu:
def __init__(self):
self.name="张三"
self.stuid=1
def displayCount(self):
print("学生姓名:%s,学号%d"%(self.name,self.stuid))
stu=Stu()
stu.displayCount()
#带参数构造方法实例
class Stu:
empCount=0
def __init__(self,name,stuid):
self.name=name
self.stuid=stuid
Stu.empCount+=1
def displayCount(self):
print("学生总数%d人"%(Stu.empCount))
def displaystu(self):
print("name:",self.name,"stuid:",self.stuid)
stu=Stu("张三",1)
stu.displayCount()
stu.displaystu()
#构析方法
class Stu:
def __init__(self,name,stuid):
self.name=name
self.stuid=stuid
def __del__(self):
print("已释放资源")
stu=Stu("张三",1)
del stu
print("进行垃圾回收")
#封装
#私有变量 __变量名
#私有方法 __方法名()
#类的私有方法操作实例
class JustCounter:
__secretCount=0
publicCount=0
def count(self):
self.__secretCount+=1
self.publicCount+=1
print(self.__secretCount)
couunter=JustCounter()
couunter.count()
couunter.count()
print(couunter.publicCount)
print(couunter._JustCounter__secretCount)
#继承
class Person:
def __init__(self,name,gender='男',weight=70):
self.name=name
self.gender=gender
self.weight=weight
print('A person named %s'%self.name)
def say(self):
print('My name is %s'%(self.name))
class Teacher(Person):
def teach(self,lesson):
print("%s terchs %s"%(self.name,lesson))
class Student(Person):
def study(self,lesson):
print("%s studies %s"%(self.name,lesson))
p=Person('关羽','男','80')
p.say()
t=Teacher('孔子','男','90')
t.say()
t.teach('python')
s=Student('王昭君','女','60')
s.say()
s.study('python')
#issubclass()或isinstance(obj,class)方法检测是否是子类
#布尔函数,返回True
#多态
#方法重写与运算符重载:实现多态的技术基础
#方法重写实例
class Parent:
def myMethod(self):
print("调用父类方法")
class Child(Parent):
def myMethod(self):
print("调用子类方法")
c=Child() #子类实例
c.myMethod() #子类调用重写方法
#类的功能方法一览表
#__init__(self[...] #构造 obj=className(...)
#__del__(self) #析构 del obj
#__repr__(self) #解释器读取 repe(obj)
#__str__(self) #人读取 str(obj)
#__cmp__(self,X) #比较 cmp(obj,X)
#运算符重载
class Computation():
def __init__(self,value):
self.value=value
def __add__(self, other):
return self.value+other
def __sub__(self, other):
return self.value-other
c=Computation(5)
x=c+5
print("重构后加法运算的结果是:",x)
y=c-3
print("重构后减法运算结果是:",y)
#常见运算符重载方法
'''
__init__
__del__
__add__
__radd__ #右侧加法
__iadd__ #实地加法
__sub__ #减法
__or__
__repr__ __str__ #打印,转换
call #调用
getattr__ #点号运算
setattr #属性赋值语句
delattr #属性删除
__getattribute__ #属性获取
__getitem__ #索引运算
__setltem__ #索引赋值语句
__delitem__ #索引和分片删除
__len__
_ _boll_ _
__lt__ __gt__ __le__ __ge__ __ep__ __ne__#特定比较
__iter__ __next__ #迭代环境
__contains__ #成员关系测试
__index__ #整数值
__enter__ __exit__ #环境管理器
__get __sel__ __delete__#描述符属性
__new__ #创建
'''