第十四课 面向对象(一)

面向对象OOP

  • 思想
    • 以模块化思想解决工程问题
    • 面向过程 VS 面向对象
    • 由面向过程转向面向对象
    • 例,开一所学校,主要讲少儿编程。首先考虑学校由什么组成
      • 讲师
      • 学生
      • 班主任
      • 教室
      • 学校
  • 常用名词
    • OO(面向对象)
    • OOA(面向分析)
    • OOD(面向设计)
    • OOP(面向编程)
    • OOI(面向实现)
    • OOA到OOD到OOP或OOI。
  • 类 VS 对象
    • 类,抽象,描述的是一个集合,侧重于共性,如学生
    • 对象,具象,描述的是个体,如张三
  • 类的内容
    • 动作,就是函数
    • 属性,就是变量
  • 类的定义,使用class关键字
  • 类的命名
    • 遵循大驼峰命名法
    • 第一个字母大写
# 定义学生类,和几个学生
class Student():    # 可以放置参数
	pass   # 此处定义一个空类,用pass占位,如果这行什么也不放会报错

# 定义一个对象,也叫类的实例化
xxxxxbai = Student()
class PythonStudent():
	name = "NoOne"
	age = 18
	course = "Python"
	```
	定义类中的函数
	一般需要有self关键字
	其余跟普通函数基本相同
	```
	def giveMeMoney(self):
		print("Show me the money")
		return None
xiaobai = PythonStudent()
print(xiaobai.name)
print(xiaobai.age)
print(xiaobai.course)

类的属性

class Student():
	name = "beijingtulingxueyuan"
	age = 19
	
	def sayHi(self):  # 指代本身,默认实例作为第一个参数传入。
		print("aitulingaishenghuo")
		# 如果函数没有retrun None,则返回啥?
		return None
	def sayHai(meme):  # self名称可更改,meme同self
		print("love meme")
		return None
erna = Student()   # 类的实例化
  • self
    • self可以用别的名称代替
    • self不是关键字
    • 作用是指代本身
    • 形参
# self 举例
# 实例调用函数
yaoyao = Student()
yaoyao.sayHi() 
# yaoyao调用sayHi没有输入参数
# 因为默认实例作为第一个参数传入
a = "sangna"
yaoyao.sayHi(a)  
# 会报错,多一个参数的错,因为yaoyao已经默认作为第一个参数传入了

类的变量作用域的问题

  • 类变量:属于类自己的变量
  • 实例变量:属于实例的变量
  • 访问实例的属性,如果实例没有定义属性,则自动访问类的属性,如果类也没有定义,报错
# 案例1
class Student():
	# name,age就是类的变量
	# 注意类的变量的定义位置和方法
	# 不需要前缀
	name = "beijingtulingxueyuan"
	age = 19
	
	def sayHi(self):
		print("My name is {},i am {} years old.".format(self.name, self.age))
		return None
 
# 以下案例说明,实例变量可以借用类的变量 
erjing = Student()
erjing.sayHi()
# 案例1
class Student2():
	# name,age就是类的变量
	# 注意类的变量的定义位置和方法
	# 不需要前缀
	name = "beijingtulingxueyuan"
	age = 19
	
	def sayHi(self, n, a):
		self.name = n
		self.age = a
		print("My name is {},i am {} years old.".format(self.name, self.age))
		return None
 
erjing = Student2()
# 注意观察下面语句打开和关闭后的区别
# erjing.sayHi("erjing", 17)
print("My name is {},i am {} years old.".format(Student2.name, Student2.age))
print("My name is {},i am {} years old.".format(erjing.name, erjing.age))
# 如果类也没有定义,报错
print(erjing.father)

访问类的属性

  • 在类里面,如果强制访问类的属性,则需要使用__class__,(注意前后的两个下划线)
  • 类方法
    • 定义类的方法的时候,没有self参数
    • 类的方法只允许使用类的内容
    • 两种用法
      1. ClassName
      2. __class__
class Student():
	# name,age就是类的变量
	# 注意类的变量的定义位置和方法
	# 不需要前缀
	name = "beijingtulingxueyuan"
	age = 19
	
	def sayHi(self):
		print("My name is {},i am {} years old.".format(self.name, self.age))
		return None
	# sos是类的方法,没有self参数,即不以实例自己为参
	# 类的方法调用需要用到特殊的方法
	def sos():
		# 类方法中不允许访问实例的任何内容,因为没有self参数,就是不能实例化,即类的方法只允许访问类的属性
		
		# print("My name is {},i am {} years old.".format(self.name, self.age)) # 报错
		# 如果访问类的内容(属性或其他方法),以下两种方式都可以
		print("My name is {},i am {} years old.".format(Student.name, __class__.age))
		return None
	
s = Student()
s.sayHi()
s.sos()   # 报错
# 类的方法的调用,直接用类调用
Student.sos()

构造函数

  • 类在实例化的时候,执行一些基础性的初始化的工作
  • 使用特殊的名称和写法
  • 在实例化的时候自动执行
  • 是在实例化过程中第一个被执行的函数
class Student():
	name = NoName
	age = 19
	def __init__(self): # 有self参数,因为构造函数是在实例化的过程中调用的
		print("我是构造函数")
erjing = Student()   # 实例化时自动调用构造函数
print(erjing.name)
print(erjing.age)

oop-Python面向对象

  • 面向对象编程
    • 基础
    • 公有私有
    • 继承
    • 组合,Mixin
  • 魔法函数
    • 魔法函数构造
    • 构造类魔法函数
    • 运算类魔法函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值