1 类与对象
1.1 定义类
- 定义:类最基本的作用就是封装代码
- 语法:
class 类名(): 代码 ......
- 注意:类名要符合标识符命名规则,同时遵循大驼峰命名习惯。一般类名用大写字母开头,函数名用小写字母开头
1.2 定义类及方法调用
- 顺序:先有
类
,再有对象
,用类去实例
化一个对象。 - 实例化:对象调用类的过程被称为实例化
- 【例子】
class 类名(): # 定义类
姓名='' #变量
年龄=0
def 实例方法(self):
print(f'你的名字是{self.姓名}')
print(f'你的名字是{self.年龄}')
对象名=类名() # 创建对象
对象名.实例方法() # 实例化
1.3 类和对象的关系
- 关系:通过实例化关联在一起的
- 类:特征即
属性
就是变量,行为即方法
就是函数- 变量又分为
类变量
和实例变量
- 变量又分为
- 比喻:类好比一个模板,通过这个模板可以产生很多个不同对象
- 以后会定义很多类,每个类名下的内容要放的是一类事物,否则就失去了面向对象的意义(如果装冰箱是一个类,砸冰箱就是另一个类)
1.4 魔法方法(构造函数)
- 魔法方法:在python中,
_xx_()
的函数叫做魔法方法,指的是具有特殊功能的函数。
1.4.1 类变量和实例变量
- 类变量:和类关联在一起的变量
- 类属性就i是类对象所拥有的属性,它被该类的所有实例对象所共有
- 类属性可以使用类对象或实例对象访问
- 【例子】
# 定义类属性 class sds(): shs='雅典娜' # 创建对象 hj=sds() qt=sds() # 访问类属性:类和对象 # 1.通过类访问 类.属性 print(sds.shs) # 2.对象访问 对象.属性 print(hj.shs) print(qt.shs)
- 类属性的优点:
- 1 记录的某项数据始终保持一致不发生改变时使用
- 2 实例属性要求每个对象为其单独开辟一份内存空间来记录数据,而类属性为全类所有,仅占用一份内存,更节省空间。
- 实例变量:和对象关联在一起的变量
- 语法:
self.变量名
- 语法:
1.4.2 修改类属性
- 类属性只能通过类对象修改,不同通过实例对象修改。如果通过实例对象修改类属性。虽然语法没有报错,但是并没有修改类属性,而是创建了一个实例属性。
【例子:通过类对象修改】
【例子,通过实例对象修改】
1.4.3 初始化对象
- 语法:
_ _init_ _()
- 作用:
- 1 在创建一个对象时默认被调用,不需要手动调用
- 2 _ init_(self)函数,不需要开发者传递,Python解释器会自动把当前的对象引用传递过去
- 3 一个类可以创建多个对象,对不同的对象设置不同的初始化属性需要传参数
- 实例化对象:
- self:指的时调用该函数的对象【self=对象名】
- 为什么不同的对象使用的是同一个self?
- 由于打印对象名和打印self得到的内存地址相同,所以self指的是打印该函数的对象
- 一个类可以创建多个对象,但是,self地址不同,因为不同的对象存储的地址不一样。
对象名1=类名() 对象名2=类名()
1.4.4 _ _str_ _()
- 作用:当使用print输出对象时,默认打印这个对象的内存地址
- 如果类定义了
_ _ str_ _()
方法,那么就会打印在这个方法中的return
的数据.
1.5 小总结
2 继承
2.1 单继承与多继承
- 继承的概念:如果两个类存在父子级继承的关系,子类即使没有任何的属性和方法,用子类继承了某一个父类,并且此子类创建了一个对象,那么这个对象就拥有父类当中的所有属性和方法的使用权。
- 【单继承】:
class xt(object): def __init__(self): self.age=30 def p(self): print(f'小头爸爸的年龄是{self.age}'