一、多态
在面向对象中表述多态:
向不同的对象发送同一条信息,不同的对象在接收之后会产生不同的行为.
也就是说,每个对象可以用自己的方式去响应共同的信息(调用函数).不同的行为指不同的实现(函数执行的效果).
# 多态指一类事物有多种形态
import abc
class Animal(metaclass=abc.ABCMeta):
@abc.abstractmethod
def talk(self):
pass
class Person(Animal):
def talk(self):
print('hello')
class Dog(Animal):
def talk(self):
print('陌上')
class Cat(Animal):
def talk(self):
print('许叶彤')
二、封装
隐藏对象的属性和实现细节,仅提供对外公开访问的方式
私有变量和私有方法
在python中用双下划线开头的方式将属性隐藏起来,就设置了私有的.
其实这仅仅是一种变形操作,类中的所有双下划线开头的名字__x都会自动变形成_类名__x的形式.
这种变形的特点:
1.类中定义的__x只能在内部使用
2.这种变形是针对外部的变形,在外部无法直接通过__x这个名字访问到
3.在子类定义的__x不会覆盖父类中的__x.子类中:_子类名__x,父类中:_父类名__x.
class A:
__n = 0
def __init__(self):
self.__x = 10 # 变形成了self._A__x
def __func(self):
print('A')
def test(self):
print(self.__x) # 只有在类内部才可以直接通过名字访问到
self.__func()
# a = A()
# a.test()
# print(a._A__x) # 在外部访问需要发生变形
# 在继承中,父类不想子类覆盖自己的方法,可以讲方法定义为私有的
class B:
def __func(self): # _B__func
print('B')
def test(self):
self.__func() # self._B__func()
class C(B):
def __func(self): # _C__func()
print('C')
c = C()
c.test()
三、property属性
被property装饰的函数,访问会自动执行然后得到返回值
property属性实际上实现了获取,修改和删除三种方法.
# bmi
# bmi = 体重(kg)/身高(m)**2
class Person:
def __init__(self, name, weight, height):
self.name = name
self.weight = weight # 体重
self.height = height # 身高
@property
def bmi(self):
return self.weight/self.height**2
# p = Person('tony', 46, 1.7)
# print(p.bmi)
class FOO:
def __init__(self, value):
self.__name = value
@property
def name(self):
return self.__name
@name.setter
def name(self, value):
# isinstance(值, 数据类型):判断值是否是某个数据类型
if not isinstance(value, str):
# raise:抛出异常
# TypeError:类型错误
raise TypeError('value必须是字符串')
self.__name = value
@name.deleter
def name(self):
# 删除的时候干的事情
print('不能删除')
f = FOO('tony')
print(f.name) # 执行获取操作会自动执行property函数
f.name = 'wuluo' # 执行赋值操作会自动执行setter函数
print(f.name)
del f.name # 执行删除操作会自动执行deleter函数
关于Python的知识今天就到这里啦,后续我会为大家讲解更多非常有用的知识哦~
关注我,带你领略Python的风采~😍😍😍