python16:面向对象

面向对象编程
类 class 和 对象 object

什么是对象(物体,实例)
  一切皆对象(世界万物是由对象组成的)

什么是面向对象
把一切看成对象(实例), 用程序建立对象和对象的关联关系

什么是类:
类是用来描述对象的工具,用类可以创建一个或多个同类对象

车(类) —–> BYD F6(京A 88888) 实例(物体,对象)
\
—–> BWM X5(京B 00000) 对象

狗(类) —–> 小京巴(户籍号: 000001)
\
—> 导盲犬(户籍号: 000002)

int(类) —-> 100 对象
\
—> 200 对象
complex
bool
str
bytes(类)

创建类的语法:
  class 类名(继承列表):
“”“文档字符串”“”
实例方法定义(类内的函数叫方法method)
类变量(class variable)
类方法(@classmethod)
静态方法(@staticmethod)

作用:
  1. 可以用类来创建一个或多个对象(实例)
2. 类内定义的变量和方法能被此类所创建的所有实例所共同拥有

示例见: class.py

创建对象(实例)的表达式
  语法:
    类名([创建传参列表])
作用:
  创建这个类的实例对象,并返回此实例对象的引用关系
实例说明:
  实例有自己的作用域和名字空间,可以为该实例添加实例变量(也叫属性 attribute )
  实例可以调用类中的方法
实例可以访问类中的类变量

类 | 对象 , 实例(物体)
class | object, instance

实例变量的调用语法:
   实例.变量名
赋值规则:
  首次赋值则创建变量
再次赋值则改变变量的绑定关系

见:class2.py

删除实例变量 del 语句
 del 对象.实例变量名
del 语句总结:
1) 删除变量
2) 删除列表中的元素
3) 删除字典中的键
4) 删除对象的实例变量

练习:
自己写一个类Student 此类的对象有属性:name, age, score, 用来保存学生的姓名,年龄,成绩
输入n多个学生的信息
将这些对象的信息保存于列表中,再用函数打印这些学生信息

见:student1.py

实例方法(method):
语法:
  class 类名(继承列表):
def 实例方法名(self, 参数1, 参数2, ….):
“”“实例方法的文档字符串”“”
语句块

说明:
实例方法的实质是函数,是定义在类内的函数
实例方法的第一个参数代表调用这个方法的实例,一般命名为”self”
实例方法属于类的属性

实例方法的调用语法:
实例.实例方法名(调用参数)

类名.实例方法名(实例, 调用参数)

注:实例方法的调用同函数调用一样是表达式,会返回一个值

示例见: instance_method.py

完善上一道练习:
  为Student类添加两个方法:
    def set_infos(….):
用来设置学生的姓名,年龄,成绩
def get_infos():
用来得到学生的信息的字符串

所有操作name, age, score 实例变量的地方用方法封装起来

构造方法(也叫初始化方法)
语法格式:
class 类名(继承列表):
def init(self[,参数列表]):
语句块

注: []的内容可省略
作用:
多用于初始化对象的实例变量
说明:
1. 构造 方法名必须为init 不可改变
2. 构造方法会在实例生成时自动调用,且将实例自身通过第一个参数self传入 init方法
3. 构造方法内如果需要return 语句返回,则只能返回None

练习3:
修改之前的Student类,为该类添加构造方法, 实现在创建对象时自动设置 name, age, score 实例变量
见:student3.py

预置实例属性:
dict属性
用于绑定保存此实例变量的字典
示例:
class Dog:
pass
dog1 = Dog()
print(dog1.dict) # 空字典{}
dog1.kinds = “京巴”
print(dog1.dict) # {‘kinds’: ‘京巴’}

练习:
创建一个车(Car) 类
车的属性有:
brand(品牌)
model(型号)
color(颜色)
车的方法有:
run(speed) 以多少公里速度行驶
infos() 显示车的信息

class属性
class 属性绑定创建此实例的类
作用:
可以借助于此属性创建同类实例
可以借助此属性访问类变量和类方法
示例:
print(dog1.class)

类变量:
是指在类class 内定义的变量,此变量属于类,不属于此类的实例
类变量可以通过该类直接访问
类变量可以通过类的实例直接访问
类变量可以通过此类的实例的class属性间接访问

示例:见class_variable.py

类的 doc 属性
用于绑定类的文档字符串,当没有文档字符串时,绑定None对象

类的 slots表列
slots是一个字符串
作用:
限定一个类创建的实例(对象)只能有固定的实例变量(属性)
说明:
含有slots列表的类所创建的实例对象没有dict属性(即此实例不用字典来存储实例变量)

示例:
slots.py

用于类的函数:
isinstance(obj, 类或元组) 返回这个对象obj是否是某个类的对象,如果是则返回True, 否则返回False
type(obj) 返回对象的类型,等同于返回obj.class
示例:
class Dog:
pass
dog1 = Dog()
print(isinstance(dog1, Dog)) # True
print(isinstance([1,2,3], list)) # True
print(isinstnace(‘hello’, int)) # False

类方法 和静态方法
类方法 @classmethod
示例:
class Human:
home = “地球”
@classmethod
def my_class_methed(cls, a):
“”“这是一个类方法,第一个参数cls为类”“”
print(a, “的家园是:”, cls.home)

说明:
类方法是只能访问类变量的方法
类方法需要使用@classmethod装饰器定义
类方法的第一个参数的类,约定写为”cls”

类方法可以用类直接调用
类方法也可以用对象间接调用

静态方法 @staticmethod
静态方法是定义在类内部的方法,只能借助于该类访问
静态方法需要用 @staticmethod装饰器定义
静态方法写普通函数的定义相同,不需要传入self和cls 参数

示例:
class A:
@staticmethod
def myadd(a, b):
return a + b

print(A.myadd(100, 200))
a = A()
print(a.myadd(300, 400))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值