python 1.简介,2.封装,3.继承与方法重写,4.Object类,5.Object类中特殊的属性与方法,6.多态,7.类的浅拷贝与深拷贝

  1. 封装、继承、多态与语言类型无关。
    (1)封装是指将复杂的实现过程包装起来,只给予调用的窗口,降低了复杂度;
    (2)继承与多态共同提高了代码的复用性与扩展性。
  2. python封装的安全性。python中要想将类中的属性变为私有的,即不希望在类外部被访问,要在属性前加两个下划线;但即使这样,该变量也能被访问,所以python是开源的?建议不要访问加了两个下划线的变量。
class Student:
	def __init__(self, name):
		self.__name = name  # 不希望在类的外部被访问的变量
	def method1(self):
		print(self.__name)  # 类的内部是可以使用的

student1 = Student('花芊墨')
# print(student1.__name)  # 直接访问该变量会报错
# print(dir(student1))  # 查看类对象student1中所有的可用的...,其中有_Student__name实例属性
print(student1._Student__name)  # 强行访问该变量
  1. python继承与方法重写
    (1)默认继承object类,实际上任何类都会最终继承object类。python支持多继承。在定义子类时,必须在自己的初始化方法中调用父类的初始化方法,也可以不调用,但没有任何意义。
    (2)方法重写,方法重写时可以调用父类中同名的方法。
    (3)多继承时,多个父类中的变量与方法重名怎么办?这会很麻烦,所以不要重名,一般在方法与属性前面加上类名作为区分。
class School:  # 默认继承object类
	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):	
		# super().__init__(school_name)  # 单继承时可以这样使用,调用父类中的初始化方法,对父类中的属性进行初始化
		School.__init__(self,school_name)  # 多继承时,这样调用父类中的初始化方法
		Grade.__init__(self,grade_name)
		self.student_name = student_name
	def name(self):  # 方法重写
		# super().name()  # 单继承时可以使用该方法
		School.name(self)  # 方法重写时调用父类中的方法
		Grade.name(self)
		print(self.student_name)

student1 = Student('加里敦','2','林间夏鸣')
student1.name()  # 可以使用父类中的实例方法
print(student1.school_name,student1.grade_name)  # 可以使用父类中的实例属性
  1. Object类,所有的类都会最终继承该类。使用内置函数dir()可以输出该类的中的所有属性与方法。
    直接输出类对象时,会调用__str__()方法。
print(student1)  # 输出的是Object中__str__()方法的结果,输出的是其内存地址。
# 为了查看类对象的信息,通常对__init__()方法进行重写。
  1. Object类中特殊的属性与方法。以两个下划线开始,两个下划线介绍的属性与对象被称为特殊属性与方法。
'''
__dict__,特殊属性,获得类对象或实例对象所绑定的所有属性与方法的字典,与Object无关。
__class__,输出对象所属的类
__bases__,输出的是类的所有父类
__base__,输出类的第一个父类
__mro__,输出类的层次关系
__subclasses__(),输出类的所有子类的列表
__new__(),用于创建对象
__init__(),注意,new方法用于创建对象,之后会指向init方法给对象初始化。
__add__(),用于加法操作,需要重写以实现自己的需求

'''
  1. 多态;python中的变量在定义时是没有类型的,它的类型取决于你给他赋的值。python中的多态不要求类之间必须存在继承关系,只要类中有对应的方法就可以实现多态。这是因为python是动态语言。Java是静态语言,实现多态时必须指定继承关系。
class Animal:  # 定义父类
    def introduce(self):
        print('我是动物')

class Dog(Animal):  # 子类1
    def introduce(self):
        print('我是狗')

class Cat(Animal):  # 子类2
    def introduce(self):
        print('我是猫')
        
class bird:  # 注意没有继承Animal类
    def introduce(self):
        print('我是鸟')

def intro(a):  # 定义一个函数,函数名和形参都可以随便命名
    a.introduce()

intro(Cat())  # 关键看传入的对象是什么类型的,传的对象是哪个,就会调用哪个对象中的方法
# Cat()是创建了一个Cat类对象的意思
intro(bird())  # 输出我是鸟 
  1. 类的浅拷贝与深拷贝
# 赋值
student1 = Student('花芊墨')  # 创建实例对象
student2 = student1  # 这是赋值,实例对象只有一个,这两个变量都指向了同一个实例对象,其实只拷贝的student1中的id给student2,其余的都没有拷贝。

# 浅拷贝
import copy
student2 = copy.copy(student1)  # 浅拷贝,只拷贝原对象(也就是student1对象),不拷贝子对象(更上层的对象)。

# 深拷贝
import copy
student2 = copy.deepcopy(student1)  # 深拷贝,拷贝原对象与子对象。所有相关的、能改变的实例对象都进行了拷贝。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值