01 类定义
封装继承和多态
封装:类可以把各种对象组织在一起,作为类的属性,通过 . (点)运算符来调用类中封装好的对象
属性:变量在类中称为属性,但是类中的属性不仅仅只包含变量,函数等其他的对象也可以作为类的属性
1,“类”与“实例”之间的关系
类:是一类事物的抽象,不是真实存在的。用来描绘该类事物的共性。
例如:“人”、“动物”、“家具”。是一个独立存放变量(属性/方法)的空间。
实例:某类事物的具体个体,是该类事物的具体表现,它是真实存在的。也是一个独立存放变量的空间
例如:“句号”是具体的某个“人”,“加菲猫”是具体的某个“动物”。
一个“实例”的“特征”,就是“属性”。在python中有两种私有属性,分别是在属性前加 一个下换线(_) 和 两个下划线__._和 __ 的使用 更多的是一种规范/约定,没有真正限制的目的,定义在类中的私有属性也可以被子类继承。
2,定义
定义:类的定义使用关键字 class
class Cat: #大驼峰命名法,每个单词的首字母大写
"""
这是一个猫类
"""
pass
#实例化对象
kitty = Cat()
hua = Cat()
属性
属性:color,eat就是对象的属性
#通过句点法给实例赋值
kitty.color = 'white'
kitty.eat = 'milk'
hua.color = 'colorful'
hua.eat = 'fish'
实例属性 : 记录的是每一个实例的特征
class Cat:
'''
这是一个猫类'''
def __init__(self,color,eat):
self.color = color
self.eat = eat
kitty = Cat("white","milk")
hua = Cat("color","fish")
print(kitty.color)
类属性:记录的是与类相关的特征
class Cat:
'''这是一个猫类'''
count = 0 #类属性,记录你实例化对象的次数
def __init__(self,color,eat):
self.color = color
self.eat = eat
Cat.count += 1 #类名.类属性名
kitty = Cat("white","milk")
hua = Cat("color","fish")
lucky = Cat("black",'food')
#类属性外部调用
print("现在创建了{}只猫".format(Cat.count)) #外部调用1:类名.类属性名
print(kitty.color) #外部调用2:实例名.类属性名
print(kitty.count) #实例调用实例属性
# print(Cat.color) #报错,类不能调用实例属性
私有属性 :单下划线开头:告诉别人这是私有属性,依然可以使用。双下划线开头:不可以使用
class Cat:
def __init__(self,color,eat,age):
self.color = color
self._eat = eat
self.__age = age
kitty = Cat("white","milk",5)
print(kitty.color)
print(kitty._eat)
# print(kitty.__age) #报错
02 方法
方法:和某个特定的类相关联的函数
# 函数转为方法
class Cat:
"""
这是一个猫类
"""
# def __init__(self,color,eat,age):
# self.color = color
# self.age = age
# self.eat = eat
def add_cat(self):
print("{}-{}".format(self.color, self.age))
kitty = Cat()
kitty.color = "white"
kitty.age = 3
# 函数调用1:方法本身就是一个函数
Cat.add_cat(kitty) # 类名.方法名
# 函数调用2
kitty.add_cat()
# self:传入的是创建的对象,self可以直接将对象的属性传入方法中
# 这种在对象中封装数据,对类进行优化的方法就叫做“封装”
1,类的私有方法
class Cat:
"""这是一个猫类"""
count = 0
def __init__(self, color, eat, name):
self.name = name # 实例属性
self._color = color # 外部可以访问的私有属性
self.__eat = eat # 外部不可以访问的私有属性
Cat.count += 1 # 内部使用
def add_cat(self):
print("{}-{}-{}".format(self._color, self.name, self.__eat))
# print(self.__print_cat())
# 私有方法
def __print_cat(self):
return "我是私有方法"
#实例化对象
kitty = Cat("white", "milk", "kitty")
print(kitty.name)
print(Cat.count)
# print(kitty.__eat)
print(kitty._color)
#调用
Cat.add_cat(kitty) # white-kitty-milk
kitty.add_cat() # white-kitty-milk
# Cat.__print_cat(kitty) # 报错,原因:私有方法不可以被实例和类直接调用
# kitty.__print_cat()
改进:私有方法虽然无法被实例和类直接调用,但可以通过内部的方法来操作:如下面的例子,通过调用Cat.add_cat(kitty)或kitty.add_cat()的调用可以打印出 “我是私有方法”
def add_cat(self):
print("{}-{}-{}".format(self._color, self.name, self.__eat))
print(self.__print_cat())
03 初始化和析构(待补充)