Python学习Day07

面向对象

面向对象技术简介

  • 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
  • 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
  • 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
  • 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
  • 实例变量:定义在方法中的变量,只作用于当前实例的类。
  • 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
  • 实例化:创建一个类的实例,类的具体对象。
  • 方法:类中定义的函数。
  • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

1.如何定义类?class 类(): pass
2.如何将类转化为对象?实例化
实例化指在面向对象编程中,使用类创建对象的过程称为实例化,是将
一个抽象的概念具体化的过程
实例化过程中一般由类名 对象名 = 类名(参数1,参数2,…)

例:

class People():						## 类:模版
    	name='Tom' 					## 属性:类中的变量

    						#方法:类中的函数
    def eat(self):
        print('%s正在吃...' %(self.name))

    def sleep(self):
        print('%s正在睡...' %(self.name))

p=People()
p.eat()					## 调用的方式
p.sleep()

在这里插入图片描述

类和属性

  • 类的创建语句class 语句

语法:

class 类名(继承列表):
‘’‘类文档字符串’’’
实例方法定义
类变量定义
类方法定义(@classmethod)
静态方法定义(@staticmethod) 作用:
创建一个类
类用于描述对象的行为和属性
类用于创建此类的一个或多个对象(实例)

说明:

类名必须为标识符(与变量名命名规则相同,建议首字母大写)
类名实质上就是变量,它绑定一个类

例:

class People():
   		 name = 'Tom'
    
    def __init__(self):
        print('self',self)
p1 = People()
print('p1',p1)

通过打印id可以对比出他们为同一对象
在这里插入图片描述

封装

封装就是把同一类型的东西放在一起,通过self.xxx去调用
例:

class People():

    def __init__(self,name,age):

        self.name = name
        self.age = age ## self是对象,name是属性,self.name把对象和属性封装在一起
    def __str__(self):
        return '我是 %s' %(self.name)


    def run(self):
        print('%s正在跑步...' %(self.name))  ## 类里面的函数,第一个参数是对象本身
p1 = People('Tom',18)
print('p1:',p1.name)
p1.run()
print(p1)

p2 = People('Lily',16)
print('p2:',p2.name)
p2.run()
print(p2)

在这里插入图片描述

继承

继承描述的是事物之间的所属关系,定义一个类时,可以从某哪个
现有的类继承
新的类称为子类,扩展类(subclass),被继承的类称为基类、父类
或超类(Baseclass、Superclass)

class AFather(object):

    def __init__(self,name,age):
        self.name = name
        self.age = age

    def eat(self):
        print('%s正在家里吃饭...' %(self.name))

    def set_goal(self):
        print('%s设置了一个目标' %(self.name))
class Son(AFather):
    					## 父类的属性、方法都会继承给子类
    						## 重写方法:直接执行子类的方法
    def eat(self):
        super(Son,self).eat()
        print('%s在外面吃饭...' %(self.name))

father = AFather('TOM',65)
son = Son('tom',38)	
				## 实例化对象默认执行构造方法,子类没有的方法会调用父类的
					## 父类也没有就报错
print(son.name)

son.eat()		## 调用父类方法

在这里插入图片描述

多继承算法

在python3中,所有的类都是新式类:新式类的继承算法是广度优先。
例:如果要在A的范围内寻找D,广度优先下找到的是与B、C同级别的D
深度优先下找到的是B、C下的D

				A
			   / \  \
			  B   C  D
			/	  |
		   D      D


		
		class D(object):
		    def test(self):
		        print('test in D...')
		
		class C(D):
		    def test(self):
		        print('test in C...')
		
		class B(D):
		    def test(self):
		        print('test in B...')
		
		class A(B,C):
		    def test(self):
		        print('test in A...')
		
		a = D()
		a.test()

通过实际操作显示结果得知,python3的继承算法,的确是广度优先
在这里插入图片描述

私有属性和私有方法

在python中,实例的变量名如果以__开头,就变成了私有变量/属性
实例的函数名以__开头,就变成了私有函数/方法
只有内部可以访问,外部不能访问

		class Student(object):
		
		    def __init__(self,name,age):
		        self.name = name
		        #私有属性
		        self.__age = age
		
		    #私有方法
		    def __get_info(self):
		        return ('%s的年龄为%s' %(self.name,self.__age))
		
		student1 = Student('小明',10)
		print(student1.name)

通过外部访问会报错

		print(student1.__age)
		student1.__get_info()

在这里插入图片描述

私有属性并不是一定不能从外部访问
python2中不能直接访问__属性名 是因为python解释器对外把 __属性名
改成了 _类名__属性名

	print(student1._Student__age)
	print(student1._Student__get_info())

在这里插入图片描述

多态特性

在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息(obj.func():是调用了obj的方法func,又称为向obj发送了一条消息func),不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。

	class Student():
	    def get_score(self):
	        print('获取学生总成绩')
	
	class Chinese():
	    def get_score(self):
	        print('获取语文成绩')
	
	class Math():
	    def get_score(self):
	        print('获取数学成绩')
	
	student1 = Student()
	student2 = Chinese()
	student3 = Math()
	student1.get_score()
	student2.get_score()
	student3.get_score()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值