找回密码
 立即注册

推荐阅读

  • 便民服务
  • 关注我们
  • 社区新手

python 类和对象,继承和多态

[复制链接]
# 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())


















分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册