网站设计怎么做背景颜色,网站被k多久可以恢复,书画院网站建设模板,wordpress 4.7.0封装
1 封装概述 是指隐藏对象的属性和实现细节#xff0c;仅对外提供公共访问方式。
2 封装原则 将不需要对外提供的内容都隐藏起来 把属性隐藏#xff0c;提供公共方法对其访问。
3 封装好处
隐藏实现细节#xff0c;提供公共的访问方式 提高了代…封装
1 封装概述 是指隐藏对象的属性和实现细节仅对外提供公共访问方式。
2 封装原则 将不需要对外提供的内容都隐藏起来 把属性隐藏提供公共方法对其访问。
3 封装好处
隐藏实现细节提供公共的访问方式 提高了代码的复用性 提高安全性。
4 代码部分
定义Person类
class Person():def __init__(self,id,name):self.ididself.namenamedef print_info(self):print(%d %s % (self.id,self.name))alexPerson(1,alex)
alex.print_info()
xiaoPerson(2,xiaoming)
xiao.print_info()在class内部可以有属性和方法而外部代码可以通过直接调用实例变量的方法来操作数据这样就隐藏了内部的复杂逻辑。
继承
介绍
对于若干个相同或者相识的类我们可以抽象出他们共有的行为或者属性并将其定义成一个父类然后用这些类继承该父类。
通过继承创建的新类称为子类或派生类被继承的类称为基类、父类。
子类不仅可以拥有父类的属性、方法还可以定义自己独有的属性或者方法。
继承的语法
class 类名(父类名):pass特点
1. 子类继承父类中的非私有化的属性和方法
2. 子类继承自父类可直接享受父类已封装好的方法不需再次开发
3. 子类中应根据职责封装子类特有的属性和方法。
4. 如果在类定义中未指定基类则默认其基类为object:
class Person:pass等同于class Person(object):pass注object是所有对象的根基类在Python中object 是所有类的基类。如果在类定义中未指定基类Python会默认将其基类设置为object类。object类是Python中所有类的根类它定义了所有Python类共有的基本行为如对象的创建和销毁、属性访问、比较操作等。 因此即使在类定义中未显式指定基类在Python中定义的每个类都会隐式继承自object类从而获得object类提供的默认行为。这种默认继承关系确保了Python中类的一致性和统一性使得所有的类都能够共享基本的对象模型和行为。
代码部分
定义Person类、Student类
class Person():def __init__(self,id,name):self.ididself.namenamedef print_info(self):print(%d %s % (self.id,self.name))class Student(Person):def __init__(self,id,name,sno):Person.__init__(self,id,name)self.snosnodef print_info(self):Person.print_info(self)print(我的学号是,self.sno)p1Person(1,张三)
p1.print_info()
s1Student(2,王五,150001)
s1.print_info()重写
当父类方法的实现不能满足子类需求时可对方法进行重写。
重写父类方法有两种情况
1.覆盖父类的方法。
2.子类对父类进行扩展。
覆盖
即在子类中定义一个同父类同名的方法且实现重写之后在运行时只会调用子类中重写的方法而不再调用父类封装的方法。
class Student(Person):def __init__(self,id,name,sno):Person.__init__(self,id,name)self.snosnodef print_info(self):print(我是一名学生我的学号是,self.sno)s1Student(2,‘王,150001)
s1.print_info()扩展
父类原本封装的方法实现是子类方法的一部分
具体实现步骤
1.在子类中重写父类的方法
2.在需要调用父类方法时用父类名.父类方法或super().父类方法
3.代码其他的位置针对子类需求编写子类特有的代码
class Student(Person):def __init__(self,id,name,sno):Person.__init__(self,id,name)self.snosnodef print_info(self):super().print_info()print(我的学号是,self.sno)s1Student(2,‘王,150001)
s1.print_info()
父类的私有属性和私有方法
子类不能在自己的方法内部直接访问父类的私有属性和方法
子类对象不能直接访问父类的私有属性和方法可通过父类公有方法间接访问到私有属性和方法。
class Person():def __init__(self):self.p公开self.__s秘密def __test(self):print(私有方法%s %s % (self.p,self.__s))class Student(Person):def fun(self):print(self.p)# print(self.__s) # 出错# self.__test() # 出错# 子类不能在自己方法内部直接访问父类的私有属性和方法
# 子类对象
s1Student()
s1.fun()
# s1.__test() 出错
# print(s1.__s) 出错
# 子类对象不能直接访问父类的私有属性和方法
多继承
继承多个父类。
语法
class 类名(父类名1父类名2……):pass代码部分
class A:def test(self):print(test方法)
class B:def demo(self):print(demo方法)class C(A,B):passcC()
c.test()
c.demo()多态
不同的子类对象调用相同的父类方法产生不同的执行结果。换句话说通过多态性可以使用统一的接口来调用不同类的方法而具体执行的方法取决于对象的实际类型。
例如假设有一个Shape基类和它的子类Circle和Rectangle它们都实现了calculate_area()方法。使用多态性可以编写一个统一的函数来计算不同形状的面积而不需要关心具体是哪种形状
class Shape:def calculate_area(self):passclass Circle(Shape):def __init__(self, radius):self.radius radiusdef calculate_area(self):return 3.14 * self.radius ** 2class Rectangle(Shape):def __init__(self, width, height):self.width widthself.height heightdef calculate_area(self):return self.width * self.heightdef print_area(shape):print(Area:, shape.calculate_area())circle Circle(5)
rectangle Rectangle(4, 6)print_area(circle) # 输出Area: 78.5
print_area(rectangle) # 输出Area: 24