面向对象笔记5 多态 属性方法

#多态:一种形态多种状态 多态也是面向对象的三大特征之一

#一个对象可以以不同的形态去呈现

# class A:

#    def __init__(self,name):

#        self._name = name

#    @property

#    def name(self):

#        return self._name

#    @name.setter

#    def name(self,name):

#        self._name = name

#

# class B:

#    def __init__(self, name):

#        self._name = name

#

#    @property

#    def name(self):

#        return self._name

#

#    @name.setter

#    def name(self, name):

#        self._name = name

# class C:

#    pass

# a = A('葫芦娃')

# b = B('钢铁侠')

# c =C()

# def say(obj):

#    print('你好%s'%obj.name)

# # say(a)

# #say(c)如果传递进去的是c则会报错因为c并没有name属性也就是说say函数现在可以接受一切带有name属性的对象

#

#

#

# class A:

#    def __init__(self,name):

#        self._name = name

#    @property

#    def name(self):

#        return self._name

#    @name.setter

#    def name(self,name):

#        self._name = name

#

# class B:

#    def __init__(self, name):

#        self._name = name

#

#    @property

#    def name(self):

#        return self._name

#

#    @name.setter

#    def name(self, name):

#        self._name = name

# class C:

#    pass

# a = A('葫芦娃')

# b = B('钢铁侠')

# c =C()

# def say(obj):

#    print('你好%s'%obj.name)

# say(a)

# def say2(obj):

#    if isinstance(obj,A):

#        print('你好%s' % obj.name)

# say2(b)#我们现在写一个say2,用类型检查函数isinstance来判断是否是A的实例,是的话打印不是的话就不打印

#这种形式就不能被称为多态,违反了多态的函数只适用于一种类型的对象无法处理其他类型的对象 这样倒是函数适应性非常差

#多态总结下来就是让我们的方法更加灵活只要满足某个要求就可以作为参数来传递了

#

# 封装:保证了对象中对象的安全性

# 继承:保证了数据的可扩展性

# 多态:保证了程序的灵活性

#属性和方法:

class A(object):

#类属性 直接在类中定义的属性就是类属性

#类属性可以通过类的实例或者本身来范文

#类属性只能通过类对象来修改不能通过实例对象来修改

    count =0

    def __init__(self):

#实例属性只能通过实例对象来访问和修改 类对象无法访问和修改

        self.name ='龙傲天'

    def text(self):#实例方法都是在类中直接定义的 以self为参数的方法都是实例方法

#实例方法调用时 python会把对象作为self传入 当通过类为对象传递时 不会自动传入self

        print('这是text',self)

@classmethod#用classmethod修饰的方法叫类方法,cls会被自动传递

    def text2(cls):

print('这是text2',cls)

@staticmethod#静态方法:静态方法不需要指定任何默认的参数 静态参数可以通过类和实例去调用

    def text3():

print('text3执行了')

# A.count = 5#这是该类属性的count

# print(A.count)

# a = A()

# # a.count = 5 #这改的是实例对象中的count属性,也就是这种方法不会影响类中属性的

# print(a.count)

# #通过实例对象添加的属性叫做实例属性

a = A()

print('a',a.name)

# print('A',A.name)

a.text()

A.text(a)#当用对象调用带self的方法时需要带上self的参数 而这个参数就是实例

A.text2()#类方法和实例方法的区别:实例方法第一个参数是self类方法第一个参数是cls

a.text2()#类方法的调用也可以用实例来调用

A.text3()

a.text3()#静态方法用类调用还有用实例调用都可以

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 8,187评论 0 9
  • 初识面向对象 楔子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战...
    go以恒阅读 4,481评论 0 6
  • 抽象类 什么是抽象类 与java一样,python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的...
    go以恒阅读 3,902评论 0 3
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 11,322评论 0 10
  • A 4 小腰兴已过 锁骨养鱼时已久 闲来无事找乐趣 撂个鸡蛋架锁骨 重复几次脸笑疼 大神评论赞不赞 尽情笑吧 姑凉...
    一个信命的北方姑凉阅读 3,408评论 15 20

友情链接更多精彩内容