python中的class(类)
编码注释:
在源⽂件的第⼀⾏或第⼆⾏写⼊如下内容:
# -*- coding:gbk -*-
# 设置源⽂件编码格式为:gbk
# -*- coding:utf-8 -*-
# 设置源⽂件编码格式为:UTF-8
⾯向对象编程:
什么是对象:
⼀切皆对象(实例)
类型对象(实例)
车  --> 车牌号(京P88888) 实例
画  --> 蒙娜丽莎(实例), ....
⾯向对象是指⽤类来描述⼀个对象(实例),⽤类来建⽴实例与实例的关联关系
对象 : object
实例 : instance
类 : class
作⽤:
⽤来描述对象
⽤来创建对象
类的创建语法:
class 类名(继承列表):
"类⽂档字符串"
实例⽅法(类内的函数methed)定义
类变量定义
类⽅法(@classmethod)定义
静态⽅法(@staticmethod)定义
最简单类的定义的⽰例:
# 定义⼀个类
class Dog:
pass
# 创建⼀个Dog实例
dog1 = Dog()
dog2 = Dog()
# 同list
L = list()  # L是list类的⼀个对象(实例)
L2 = list()
L3 = list(range(10))
类的创建语法说明:
类名必须是标识符
类名实质上是变量,它绑定⼀个类
类的定义的前后要加两个空⾏以告诉解释执⾏器,类的定义已经开始和结束
实例创建表达式:
类名([创建传参列表])
作⽤:
创建⼀个类的实例对象并返回此实例的引⽤关系
实例说明:
实例有⾃⼰的作⽤域和名字空间,可以为该实例添加变量(实例变量/属性)
实例可以调⽤类中的⽅法
实例可以访问类中的类变量
实例变量:
在python程序中,每个实例可以有⾃⼰的变量,每个实例变量有⾃⼰独⽴的作⽤域
实例变量的调⽤语法:
实例.变量名
实例变量的赋值规则:
⾸次为实例变量赋值则创建此实例变量
再次为实例变量赋值则改变变量的绑定关系
⽰例见:
1# dog.py
2
3
4class Dog:
5"""这是⼀个⼩狗的类
6
7此类⽤来创建⼩狗的实例
8"""
9pass
10
11
12 dog1 = Dog()
13 dog1.kinds = "京巴"# 为实例添加 kinds 属性
lor = "⽩⾊"
15
16 dog2 = Dog()
17 dog2.kinds = "藏獒"
lor = "棕⾊"
19
20print("dog1的属性:", dog1.kinds, lor)
21print("dog2的属性:", dog2.kinds, lor)
实例⽅法:
语法:
class 类名(继承列表):
def 实例⽅法名(self, 参数1, 参数2, ...):
"实例⽅法的⽂档字符串"
语句块
实例⽅法说明:
  实例⽅法的实质就是函数,是定义在类内的函数
实例⽅法属于类的属性
实例⽅法的第⼀个参数代表调⽤这个⽅法的实例,⼀般命名为: "self"实例⽅法如果没有return 语句则返回None
调⽤语法:
实例.实例⽅法名(调⽤参数)
类名.实例⽅法名(实例, 调⽤参数)
⽰例见:
# instance_method.py
class Dog:
def say(self):
"""这是⼩狗的沟通⽅法"""
print("旺!")
print("self.kinds=", self.kinds)
dog1 = Dog()
dog1.kinds = "京巴"
# 调⽤⽅法1
dog1.say()
dog2 = Dog()
# 下⼀⾏出错,因为第8⾏ self绑定的
# 对象没有kinds实例变量
dog2.say()
# instance_method.py
class Dog:
def say(self):
"""这是⼩狗的沟通⽅法"""
print("旺!")
def eat(self, that):
"为狗进⾷,同时在狗的food属性⾥记住吃的是什么"
print("⼩狗正在吃", that, "旺!...")
self.food = that
def food_info(self):
"显⽰狗的进⾷信息"
print("⼩狗刚吃过的是:", self.food)
dog1 = Dog()
# 调⽤⽅法1
dog1.say()
# 调⽤⽅法2
Dog.say(dog1)
dog2 = Dog()
dog1.eat("⾻头")
dog2.eat("窝头")
# print("⼩狗1吃的是", dog1.food)
# print("⼩狗2吃的是", dog2.food)
dog1.food_info()
r = dog1.food_info()
print(r)
class MyList:
def append(obj):
# 把obj放在某个容器的尾部
return None
构造⽅法(也叫初始化⽅法)
作⽤:
创建对象,初始化实例变量
构造⽅法的语法格式:
class 类名(继承列表):
def __init__(self [, 参数列表]):
语句块
[] 代表可省略
说明:
1. 构造⽅法名必须是: __init__ 不可改变
2. 在⼀个类内只能有⼀个__init__构造⽅法起作⽤
3. 构造⽅法会在实例⽣成时⾃动调⽤,且将实例⾃⾝通过第⼀个参数self传⼊__init__⽅法
4. 构造⽅法内如果需要return语句返回,则只能返回None
1class Car:
2def__init__(self, c, b, m):
3"这是构造⽅法"
4print("__init__被调⽤!")
5        lor, self.brand, del = c, b, m
6
7def run(self, speed):
lor, "的", self.brand,
9              del, "正在以", speed,
10"公⾥/⼩时的速度驶")
11
12def change_color(self, c):
13"此⽅法⽤来改变颜⾊"
14        lor = c  # 换⾊
15
16
17 a4 = Car("红⾊", "奥迪", "A4")
18
19 a4.run(199)
20 a4.change_color("⿊⾊")  # 推荐
21# a4.color = "银⾊"  # 不推荐
22 a4.run(233)
23
24 ts = Car("蓝⾊", "Tesla", "S")
25 ts.run(300)
析构⽅法:
语法格式:
class 类名(继承列表):
def __del__(self):
语句块
说明:
析构⽅法在对象被销毁时被⾃动调⽤
注:
python语⾔建议不要在对象销毁时做任何事情,因为销毁的时间难以确定预置实例属性:
__dict__属性:
通常每个对象(实例)都有⼀个__dict__属性
__dict__属性绑定⼀个存储此实例⾃⾝变量的字典
例:
class Dog:
pass
dog1 = Dog()
print(dog1.__dict__)
__doc__属性:
记录⽂件字符串, ⽤于help帮助
此⽂件字符串与类的⽂档字符串相同
__class__属性
⽤于绑定创建此实例的类对象(类实例)
作⽤:
可以借助此属性来创建同类对象
可以借助此属性来访问类对象(类实例)
⽰例:
class Dog:
pass
dog1 = Dog()
dog2 = dog1.__class__()  # 创建dog2
类变量
1. 是指在类class 内定义的变量,此变量属于类,不属于此类的实例
2. 类变量可以通过该类直接访问
3. 类变量可以通过类的实例直接访问
4. 类变量可以通过此类的对象的__class__属性间接访问
语法:
class 类名(继承列表):
变量名 = 表达式
....
⽰例:
class Human:  # ⼈类
home = "地球"  # 类变量
print(Human.home)  #  home 属于  Human类变量
类的 __slots__ 列表属性
作⽤:
限定⼀个类创建的实例只能有固定的实例属性
不允许对象添加列表以外的实例属性(变量)
防⽌⽤户因错写属性的名称⽽发⽣程序错误!
说明:
__slots__属性是⼀个列表,列表的值是字符串
含有__slots__ 属性的类所创建的实例对象没有
__dict__属性,即此实例不⽤字典来存储属性
⽰例:
class Student:
# __slots__ = ["name", "age", "score"]
def __init__(self, n, a, s):
self.name = n
self.age = a
self.score = s
self.scros = s  # 错,因为scros不在列表⾥
s1 = Student("李四", 21, 100)
s1.name = "张三"
s1.abcd = 10000  # 出错
对象的属性管理函数
1. getattr(obj, name[, default])  从⼀个对象得到对象的属性; getattr(x, 'y') 等同于x.y,当属性不存在时,如果给出default参数,则返回default,如果没有给出default则⽣⼀个AttributeError错误
2. hasattr(obj, name) ⽤给定的name返回对象obj是否有此属性,此种做法可以避免在getattr(obj, name)时引发错误
3. setattr(obj, name, value) 给对象obj的名为name的属性设置相应的值value; set(x, 'y', v)  等同于 x.y = v
4. delattr(obj, name) 删除对象的obj中的name属性, delattr(x, 'y') 等同于 del x.y
⽤于类的函数:
isinstance(obj, 类或元组) 返回这个对象obj是否是某个(或某些)类的对象,如果是则返回True, 否则返回False
type(obj)  返回对象的类型
类⽅法 @classmethod
类⽅法是只能访问类变量的⽅法
类⽅法需要使⽤@classmethod装饰器定义
类⽅法的第⼀个参数是类实例, 约定写为 cls
说明:
类实例的对象实例都可以调⽤类⽅法
类⽅法不能访问实例变量
⽰例:
class Human:
home = "地球"
@classmethod
def set_home(cls, h):
cls.home = h
print("欢迎来到", cls.home)
静态⽅法 @staticmethod
静态⽅法是普通的函数析构方法
静态⽅法定义在类的内部,只能凭借该类的实例访问
静态⽅法需要使⽤@staticmethod装饰器定义
静态⽅法与普通函数定义相同,不需要传⼊self和cls参数
说明:
类实例和对象实例都可以调⽤静态⽅法
静态⽅法不能访问类变量和实例变量
⽰例:
# 静态⽅法⽰例
class A:
@staticmethod
def myadd(a, b):

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。