Python高级内容–面向对象(1)
下面包含了一些python面向对象的一些基本和更高级的内容,代码都有相应的注释。
*
第一个模块
class student(): #一个模块最好只写一个类
name = '111' #类变量
age = 0
sum = 0
def __init__(self,name,age): #构造函数--传入参数并初始化
self.name = name
self.age = age
#print(student.sum) #由于下面有两个实例,会运行两次,即打印两个sum
#print(self.__class__.sum) #效果同上
def printer(self):
print('name: '+self.name)
print('age '+str(self.age))
self.xxx() #内部调用实例方法的例子
@classmethod #装饰器,使得下面的psum成为类方法,不可以访问实例变量,可以访问类变量,下同
def psum(cls):
cls.sum += 1
print('now we have:')
print(cls.sum)
@staticmethod #静态方法,与类和对象的关联性不强,和函数几乎无异
def add(x,y):
print('this is the static method')
def xxx(self):
pass
#面向对象的三大特性:继承,封装,多态
#继承--避免定义重复的方法 class a(b) a是b的子类
第二个模块
from PY2 import student #import会把PY2先执行一次,所以PY2最好没有class之外的代码
print(student.name) #类变量
s2 = student('456',19)
s1 = student('123',18)
print(s1.name) #实例变量
s1.psum() #调用类方法,外部调用
student.add(1,2) #调用静态方法
print(s2.name) #实例变量
student.psum() #调用类方法 两种方式效果一样(the latter is better)
#s1.__init__() 主动和被动各调用一次
print(s1.__dict__) #打印实例变量
#使用方法来行使功能,保证了外部只能调用方法来进行修改,在方法本身的限制下相对于直接修改变量更加安全--封装
#进一步地 成员(变量和方法)的可见性 public,private-->无法在外部进行修改
#默认为public,"__"私有化,右边再次“__“会去私有化
#但是其实可以更换变量名再次读取私有变量在,所以python其实没有所谓的私有变量