- 封装、继承、多态与语言类型无关。
(1)封装是指将复杂的实现过程包装起来,只给予调用的窗口,降低了复杂度;
(2)继承与多态共同提高了代码的复用性与扩展性。 - python封装的安全性。python中要想将类中的属性变为私有的,即不希望在类外部被访问,要在属性前加两个下划线;但即使这样,该变量也能被访问,所以python是开源的?建议不要访问加了两个下划线的变量。
class Student:
def __init__(self, name):
self.__name = name
def method1(self):
print(self.__name)
student1 = Student('花芊墨')
print(student1._Student__name)
- python继承与方法重写。
(1)默认继承object类,实际上任何类都会最终继承object类。python支持多继承。在定义子类时,必须在自己的初始化方法中调用父类的初始化方法,也可以不调用,但没有任何意义。
(2)方法重写,方法重写时可以调用父类中同名的方法。
(3)多继承时,多个父类中的变量与方法重名怎么办?这会很麻烦,所以不要重名,一般在方法与属性前面加上类名作为区分。
class School:
def __init__(self,name):
self.school_name = school_name
def name(self):
print(self.school_name)
class Grade:
def __init__(self,grade_name):
self.grade_name = grade_name
def name(self):
print(self.grade_name)
class Student(School,Grade):
def __init__(self,school_name,grade_name,student_name):
School.__init__(self,school_name)
Grade.__init__(self,grade_name)
self.student_name = student_name
def name(self):
School.name(self)
Grade.name(self)
print(self.student_name)
student1 = Student('加里敦','2','林间夏鸣')
student1.name()
print(student1.school_name,student1.grade_name)
- Object类,所有的类都会最终继承该类。使用内置函数dir()可以输出该类的中的所有属性与方法。
直接输出类对象时,会调用__str__()方法。
print(student1)
- Object类中特殊的属性与方法。以两个下划线开始,两个下划线介绍的属性与对象被称为特殊属性与方法。
'''
__dict__,特殊属性,获得类对象或实例对象所绑定的所有属性与方法的字典,与Object无关。
__class__,输出对象所属的类
__bases__,输出的是类的所有父类
__base__,输出类的第一个父类
__mro__,输出类的层次关系
__subclasses__(),输出类的所有子类的列表
__new__(),用于创建对象
__init__(),注意,new方法用于创建对象,之后会指向init方法给对象初始化。
__add__(),用于加法操作,需要重写以实现自己的需求
'''
- 多态;python中的变量在定义时是没有类型的,它的类型取决于你给他赋的值。python中的多态不要求类之间必须存在继承关系,只要类中有对应的方法就可以实现多态。这是因为python是动态语言。Java是静态语言,实现多态时必须指定继承关系。
class Animal:
def introduce(self):
print('我是动物')
class Dog(Animal):
def introduce(self):
print('我是狗')
class Cat(Animal):
def introduce(self):
print('我是猫')
class bird:
def introduce(self):
print('我是鸟')
def intro(a):
a.introduce()
intro(Cat())
intro(bird())
- 类的浅拷贝与深拷贝。
student1 = Student('花芊墨')
student2 = student1
import copy
student2 = copy.copy(student1)
import copy
student2 = copy.deepcopy(student1)