#多态:一种形态多种状态 多态也是面向对象的三大特征之一
#一个对象可以以不同的形态去呈现
# 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()#静态方法用类调用还有用实例调用都可以