# coding=utf-8
# 类用class来定义 类分经典类和新式类
# 经典类:class 类名
# 新式类:class 类名(object)
# 定义一个类的时候,类名称字母要用大写
# class Peole: 经典类
# class Peole(object) # 新式类,继承object object是超类或者基类(所有类都是由object来产生)
# 经典类和新式类的区别通过实例
# class A: #这是一个经典类
# def f(self):
# name='sdf'
# # 这是一个经典类不继承超类(object)
# class B(object):
# def c(self):
# name='sd'
# # 这是一个新式类继承了超类(object)
# if __name__ == '__main__':
# x=A #经典类
# print dir(x)
# #['__doc__', '__module__', 'f']
# y=B #新式类
# print dir(y)
#['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'c']
# 模块中有类、函数、方法、变量、常量等
# 在类中的函数我们叫做为方法,与类对齐的函数叫做普通函数
# class A(object):
# # i ='大家好'
# def __init__(self,name):
# self.name=name #
# def ff(self):
# print self.name
# p = A('李四') #p叫做对象
# p.ff() #通过对象调用函数本身
# class People(object): # 定义一个类
# def __init__(self, name): # self叫实例方法 name叫实例参数 __init__构造函数
# self.name = name # self.name叫做为实例变量 这个self为当前对象本身
# def play(self): # 在类里面在定义一个实例方法
# print self.name + "都是万元户"
# p = People("小钱") # people为类名 people()为一个匿名对象 p是一个匿名对象
# p.play() # 对象调用实例方法 p这个对象调用实例方法打印出结果
# init存在意义,往往是赋值,或者作为启动内部方法使用
# 比如:人创建一个类,等同创建了一个班级,每个实例就是一个学生,但只要学生进入了班级
# 就要先发给他一套对应班级要求上课的书,这个过程发书赋值就是在init里面做
# slef:就是代表这一个学生,首先每个学生有每个学生的属性,每次运行实例方法的试试或者改变实例
# 属性的时候,只是改变他自己的,不能一个学生考试不及格,全部同学都不及格
# 在整个类里面有的属于类的,有的属于对象的,那么属于类的字段叫静态字段,属于对象的字段叫做动态字段
# class A(object):
# a ="48班大家好!!!" #静态字段
# def __init__(self,name,age,scor):
# self.name=name #方法内的这些属于动态字段
# self.age=age
# self.scor=scor
# p = A('张三','18','100') #定义一个对象
# print p.name #对象调用动态
# print p.age
# print p.scor
# print A.a #类调用静态
# print p.name+p.age+p.scor #调用组合时候必须全部类型相同否者或报错
# class Province:
# memo = '中国的23个省之一'#这个属于类的类型
# def __init__(self,name,capital,leader):
# self.Name = name
# self.Capital = capital
# self.Leader = leader#动态方法
# def sports_meet(self): #这里相当是一个方法
# print self.Name + '正在开运动会'#静态方法
# @staticmethod #装饰器不改变原有函数功能的基础上,给与该函数额外的功能\
# def __init__(self):
# pass
# def fuu(self):
# print self.Name+'dalao'
# def foo(self): #方法中去掉self参数
# print self.Name+'每个省要带头反腐'
# hb = Province('河北','石家庄','小陈') #实例化
# hb.sports_meet()
# hb.foo()
# print Province.memo
# # hb.fuu()
#这里使用类名去调用动态方法,执行报错,说明类是不能去调用动态方法
# province.sports_meet()
# 类的继承
# class Fulei(object): #父类
# def __init__(self):
# pass
# def f(self):
# print '48班大佬'
# def g(self):
# print '优秀的大佬'
# def h(self):
# print '无可挑剔!!'
# class Zilei(Fulei): #子类
# def __init__(self):
# Fulei.__init__(self)
# def j(self):
# print '真大佬'
# def k(self):
# print '确实无可挑剔'
# def l(self):
# print '牛逼的不行!!'
# p = Zilei()
# p.j()
# p.g()
# p.h()
# p.l()
# p.k()
# p.f()
# 封装性最大的一个体现:函数、方法可以封装在类当中
# 实例方法都是绑定在当前类的对象身上
# class A: #定义一个类 经典类
# def steName(self,name): #创建对象 设置姓名参数
# self.name=name
# def gatName(self): #取值方法
# return self.name
# a = A() #创建一个对象
# a.steName("小钱很牛逼!!") #设置
# print a.gatName() #取值
# class A(object):
# def __init__(self,name):
# self.name=name #
# def ff(self):
# print self.name
# p = A('李四') #p叫做对象
# p.ff() #通过对象调用函数本身
# # 多态可以增加代码的灵活度,以继承和重写⽗类⽅法为前提,是⼀种调⽤⽅法的技巧,不会影响到类的内部设计,请看以下案例:
# #定义个父类
# class duoceshi:
# def run(self):
# print '游泳'
# # pass# 定义⼦类,并重写⽅法
# class sport_A(duoceshi):
# def run1(self):
# print '爬羊台山 '# 定义⼦类,并重写⽅法
# class sport_B(duoceshi):
# def run(self):
# print '打羽毛球' # 定义⼈类
# class dcs_39(object):
# def fun(self,duoceshi): # 只要能接收⽗类对象,就能接收⼦类对象
# duoceshi.run()
# # 只要父类对象能工作,子类对象就能工作。并且不同子类会产生不同的执行效果。
# p = dcs_39()
# # 发现,只要调用父类的方法,传入不同的对象,可以获得不同的结果p.fun(sport_A
# # p.fun(sport_B())
# p.fun(sport_A())
# # p.fun(duoceshi())
|
|