Python 类(class)1
前言
类(class)是python中很重要的一个概念,也是我们面象对象编程中最重要的概念主之一
如何去理解类,就像如何去理解函数(方法)一样,首先要有一颗常态的心,不要因为新名词,新事物,而自乱阵脚.
然后,尽量用类比的方法去学习一个新事物,会让你更容易理解.
这里简单的说明一下本人对类的理解
从使用角度讲,类是一个有特点的功能集成者.
即当我们说到一个类的时候,
- 通常会去了解这个类能做什么事情.比如,我们Pygame中的矩形(Rect)就是一个类,它可以移动.
- 这个类有什么特点(属性)
从程序设计角度讲,类的组织是为了更好的重用代码,更好的组织代码,以及本质是一个数据类型.
本节提要
内容详情
类的声明:
class MyClass(object):
pass
class: 是一个关键字,就像定义函数时用的def一样,说明我们要定义的是一个类
MyClass: 我们设计的类的类名.就像我们所有的地球人,统称"人"一样,对一个类型的统称
参数object:父类
类的构函数
class MyClass(object):
def __init__(self, args):
pass
init(self,args)
这个函数称为类的构造函数
用来对类进行一些初始化的操作
这个函数在类进行实例化的时候自动调用
实例:
class MyClass(object):
def __init__(self, text):
print(text)
mc = MyClass("我是在初始化的时候打印的") # 类的实例化
可以看到,当我们实例话的时候,会自动调用__init__()函数
名词:
类中的函数,通常称为类的方法
注意:
构造函数中,函数名是固定的,第一个参数self也是固定的.
如果没有self这个参数,构造函数会出错
看以下实例
class MyClass2(object):
def __init__(text):
print(text)
mc = MyClass2("我是在初始化的时候打印的")
效果图
总结:
构造函数:
- 函数名:init()
- 第一个参数self固定的
类的方法
类的实例方法要点:
- 定义在类内部的函数
- 第一个参数必须是self
- 使用时,实例名.方法名()
# 类的方法示例
class MyClass3(object):
# 构造函数
def __init__(self, text):
print("我是构造方法" + text)
# 类的方法:move()
def move(self):
print("我移动了")
mc4 = MyClass3("mc4")
mc4.move() # 调用类的move()方法
类的静态方法:
当我们希望一个类,不实例化也能调用类的某个方法时,这个方法应该被定义成静态方法
- 方法定义前加下@staticmethod修饰
- 方法的参数没有self
- 调用时直接用类名.方法名()来使用
class MyClass5(object):
# 构造函数
def __init__(self, text):
print("我是构造方法" + text)
# 类的静态方法,可以实例化直接调用
@staticmethod
def dd():
print("所有实例共有方法")
MyClass5.dd()
类的属性
第一种:实例属性
要点:
- 定义在构造函数/类的方法内
- 在类的定义中用self.属性名来使用
- 实例化类后用实全例名.属性名来访问或者修改
第二种: 类的属性
要点: - 定义在方法外
- 在类的定义中用类名.属性名来使用
- 类的属性被所有类的实例所共有(改变一次类属性,其他的实例的类属性也会变)
- 可以直接使用类名.属性名来使用
- 当类的属性被实例单独改变时,这个属性会与实例绑定,不再受类.属性名改变而改变
# 类的属性示例
class MyClass6(object):
weight = 100 # 类属性
def __init__(self, name, age):
self.name = name # 实例属性name
self.age = age # 实例属性age
print(MyClass6.weight) # 打印类属性
mc6_1 = MyClass6("mc6_1", 12) # 实例化类
print(mc6_1.name, mc6_1.age) # 访问实例化属性
# 改变类属性与实例化属性
MyClass6.weight = 200 # 我又重了
mc6_1.name = "mc6_1改名了"
mc6_1.age = 11 #我变年轻了
print(MyClass6.weight)
print(mc6_1.name, mc6_1.age) # 访问实例化属性
mc6_2 = MyClass6("mc6_2", 20)
print(mc6_2.weight)
mc6_2.weight = 300 # 改变了实例的类属性
print(mc6_1.weight)
print(mc6_2.weight)
MyClass6.weight = 400 # 再改类属性
print(mc6_1.weight)
print(mc6_2.weight) # 该实例的此类属性不会再随着类名.属性名 的操作方法改变而改变了
后记
类的内容还有很多,这里简单的介绍了类的基本内容:
- 类的定义方法
- 类的构造函数
- 类的方法
- 类的属性
这几天在折腾电脑,给自己的电脑装了个黑苹果系统.由于无线网卡驱动问题,导致黑苹果系统还无法正式投入使用.明天网卡就能到了,到时候用黑苹果感受一下写代码的感觉是不是比win好点.
今天更新的内容有点少,但是内容的深度比较大,需要慢慢来体会