面向对象

面向对象技术

  1. 类:用来描述具有相同属性和方法的对象的集合,它定义了该集合中所有对象所共有的属性和方法。
  2. 对象:类的实例。
  3. 方法:类中定义的函数。
  4. 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其改写,这个过程叫做方法的覆盖,也称为方法的重写。
  5. 析构函数:释放对象。
  6. 面向对象的三大特性:⬇
  7. 继承:代码的重用,相同的代码不用写多次。
  8. 封装:属性私有化,子类不能继承父类私有的属性和方法。
  9. 多态:对象在不同情况下,具有不同的形态,存在继承关系。

类的定义

  • 类的创建过程:要实现的功能---->找到对象---->抽象(类)---->创建对象
#类名每个单词首字母大写,不要用"_"定义,
class 类名():
	#__init__是构造方法,用来创建对象。
	#self是临时的对象,在类中调用属性。
	def __init__(self,name,age,...):
		self.name = name
		self.age = age
	def 方法名(self,参数1,参数2,...):
		pass
	#析构函数  生命周期:从生到死
	def __del__(self):
		print("对象被销毁")
#创建对象,
变量 = 类名(init方法中的属性值)
变量.name/变量.类中方法名()  #调用所创建对象的属性值或这方法

在定义类注意事项:

  1. self不能在类外访问类中的属性和方法。
  2. init方法中的name可以和self.name不一样。
  3. 如果一个类中有两个构造方法或方法,下边的方法会覆盖上边的方法。
  4. 如果没有构造函数,系统会默认生成构造函数也叫缺省构造函数。

继承

class Animal():
 def __init__(self,name,age,color,sex):
 	self.name = name
 	self.age = age
 	self.color = color
 	#属性名前加两个下划线表示私有属性。
 	self.__sex = sex 
 	def eat(self):
 		print("吃饭")
	def sleep(self):
 		print("睡觉")
	#在方法名前加两个下划线表示私有方法"__"。
	def __play(self)
		print("玩游戏")
 #子类(父类),继承父类的属性和方法(除了构造方法,和父类私有属性和方法)
class Dog(Animal):
	def __init__(self,name,age,color):
		Animal.__init__(self,name,age,color):
#创建对象时,继承时父类和子类object都创建。
d = Dog("炫炫",5,"黑白花")
print(d.name)

#多继承
class Person():
	def __init__(self,name,age,sex,height,weight):
 		self.name = name
 		self.age = age
 		self.sex = sex
 		self.height = height
 		self.weight = weight
 	def learn(self):
		print("学习")
	def walk(self):
		print("走路")
#当子类继承的父类属性和方法冲突时,写在前面的为主,如Animal,Person以Animal为主,为第一父类。
class Monster(Person,Animal):
	def __init__(self,name,age,sex,height,weight,color,buff)
		#也可用super().__init__()继承
		Animal.__init__(self,name,age,color)
		Person.__init__(self,name,age,sex,height,weight,color)
		#子类自身的属性
		self.buff = buff
	#子类自己的方法	
	def fly(self):
		pass
	#重写,如果相同会覆盖,第一父类中的方法。
	def learn(self):
		print("练功")
	

封装

class Person():
	def __init__(self,name,age):
 		self.name = name
 		#只能在类中访问
 		self.__age = age
	#程序外无法访问,需要用方法设置age的值
	def setAge(self,value):
		self.__age = value
 	#查看age的值
 	def getAge(self):
 		return self.__age
p = Person("炫狗",1)
p.setAge(200)#设置年龄
p.getAge()#查询年龄

多态

def Fruit():
	def __init__(self,name):
		self.name = name
		
def Apple(Fruit):
	def __init__(self,name):
		Fruit.__init__(self,name)
		
def Banana(Fruit):
	def __init__(self,name):
		Fruit.__init__(self,name)
		
def Saler():
	def buy(self,fruit):
		print("买了",fruit.name)
		
s = Saler()

# a = Apple("iPhone 7p")
# fruit = a
# a.name
s.buy(Apple("iPhone 7p"))
s.buy(Banana("大香蕉"))

继承、关联、依赖

  1. 关联:一个类的对象作为另一个类的属性,两个类关联关系。
  2. 依赖:一个类的对象作为另一个类中方法的参数,两个类依赖关系。
  3. 耦合程度,继承>关联>依赖
  4. 高内聚,低耦合

成员方法

class ABC():
	#self指向对象
	def a(self):
		print("a")
	
	@classmethod
	#self指向类
	def b(self):
		#可以用 self().a() 调用a方法。
		print("b")
	
	@staticmethod
	#里边不能写self
	def c():
		print("c")

  • 三个方法都可以用对象调用。
  • 类方法(@classmethod)和静态方法(@staticmethod)可以用类名调用。
  • isinstance(object,classinfo),用于判断object是否是classinfo的一个实例,或者object是否是classinfo类的子类的一个实例,如果是返回True. issubclass(class,classinfo),用于判断class是否是classinfo类的子类,如果是返回True.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值