封装继承多态
Posted wn-888
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了封装继承多态相关的知识,希望对你有一定的参考价值。
封装是面向对象的三大特性之一
封装指的是隐藏对象中的一些不希望被外部所访问的属性或方法
如果隐藏一个对象中的属性?
将对象的属性名,修改为一个外部不知道的名字
如何获取(修改)对象中的属性?
-
需要提供一个getter和setter方法使外部可以访问到属性
-
getter 获取对象中指定属性(getter_属性名)
-
setter 用来设置对象中指定属性(setter_属性名)
使用封装,确实增加了类的定义的复杂程度,但是它也确保了数据的安全性
-
隐藏了属性名,使用调用者无法随意的修改对象的属性确保了数据的安全性
-
增加了getter和setter方法,很好的控制了属性是否是只读的
-
如果希望属性是只读的,则可以直接去掉setter方法
-
如果希望属性不能被外部访问,则可以直接去掉getter方法
-
-
使用setter方法设置属性,可以增加数据的验证,确保数据的值是正确的。
-
使用getter方法获取属性,使用setter方法设置属性
-
可以在读取属性和修改属性的同时做一些其他的处理
-
-
使用getter方法可以表示一些计算的属性
class Dog:
‘‘‘
表示狗的类
‘‘‘
def __init__(self,name):
self.hidden_name = name
def say_hello(self):
print(‘大家好,我是%s‘%hidden_name)
def get_name(self):
‘‘‘
get_name()用来获取对象的name属性
‘‘‘
return self.hidden_name
def set_name(self,name)
self.hidden_name = name
d = Dog(‘旺财‘)
d.say_hello()
可以为对象的属性使用双下划线开头,__xxx
双下划线开头的属性,是对象的隐藏属性,隐藏属性只能在类的内部进行访问,无法通过对象进行访问
其实隐藏属性只不过是python自动为属性改了一个名字
实际上将名字修改为,_类名__属性名
class person:
def __init__(self,name):
self.__name = name
def get_name(self)
return self.__name
def set_name(self,name)
self.__name = name
p = person(‘孙悟空‘)
#print(p.__name)__开头的属性是隐藏属性,无法通过对象访问
#p.__name = ‘猪八戒‘
print(p.set_name())
?
继承是面向对象三大特性之一
-
通过继承我们可以使一个类获取到其他类中的属性和方法
-
在定义类时,可以在类名后的括号中指定当前类的父类(超类,基类,supper)
-
子类(衍生类)可以直接继承父类中的所有的属性和方法
-
通过继承可以直接让子类获取到父类的方法或属性,避免编写重复性的代码,并且也符合opc原则
所有我们经常需要通过继承来对一个类进行扩展
class Dog(Animal):
def bark(self):
print(‘汪汪汪····‘)
d = Dog()
print(d)
在创建类时,如果省略了父类,则默认父类为object。object是所有类的父类,所有类都继承自object
class Person(object):
pass
issubclass()检查一个类是否是类一个类的子类
isinstance()检查一个对象是否是一个类的实例,如果这个类时这个对象的父类,也会返回True,所有的对象都是object的子类
多态是面向对象的三大特征之一
多态从字面上理解是多种形态
一个对象可以以不同的形态去呈现
定义一个函数,只要对象中含有name属性,他就可以作为参数传递
这个函数并不会考虑对象的类型,只要name属性即可
def say_hello(obj):
print(‘你好%s‘%obj.name)
def say_hello_2(obj):
#做类型检查
if isinstance(obj,A):
print(‘你好%s‘%obj.name)
#say_hello(b)
鸭子类型
如果一个东西,走路像鸭子,叫声像鸭子,那么他就是鸭子
len()
之所以一个对象能通过len()来获取长度,是因为对象中具有一个特殊方法——len—— 换句或说,只要对象中具有len特殊方法,就可以通len()来获取它的长度
面向对象的三大特征:
封装
确保了对象中的数据安全
继承
保证了对象的可扩展性
多态
保证了程序的灵活性
以上是关于封装继承多态的主要内容,如果未能解决你的问题,请参考以下文章