类的定义
共同属性,特征,方法者,可分为一类,并以名命之
class Abc: # class 定义类, 后面接类名 ( 规则 首字母大写 )
cls_name = '这个类的名字是Abc' # 在类里定义的变量 是 属性
print( Abc.cls_name )
Abc.binbin = '正在25班教室' # 可以通过 类名.属性名 = 属性值 给类添加属性
print( Abc.binbin )
------》》》》》
这个类的名字是Abc
正在25班教室
类是一个独立存放 变量(属性),方法 的定单
其中: Abc.cls_name 在定义类时已经封装好的属性,
Abc.binbin = '正在25班教室' 在定义类后,进行属性的添加,封装
类的实例化,
obj = Abc() obj 是 Abc() 实例化 后得到的 实例 本质就是 return
print( obj.cls_name )
print( obj.binbin )
类 与 实例 的关系: 其是一类事物的抽象,不是真实存在的,描绘了该的共性,
比如:‘人’,‘动物’,‘家具’,某类事物的具体个休,
是该类事物的具体表现,是真实存在的。
实例也是一个独立存放 变量(属性),方法 的定单
不同实例间的问个空间不相通,当调用中的属性在实例中找不到时,会去类中寻找,找不到则报错,
基于类而创建的一个具体的事物,是具体存在的,
类的方法
class Abc:
def ee(self): # 在类里,函数 叫 方法
print(self) # self 是实例本身
obj = Abc() # 实例在调用 方法 时,自动传入 self 参数
obj.ee()
实例.方法(参数) ---》》 类.方法(实例,参数)
参数 self 将会自动传入, 通常谁调用,就指的是谁,
私有属性,方法
class Abc:
_x = 2 # 私有的定义,
__y = '不能说的秘密' # 私有的定义,
obj = Abc()
print(obj._x)
print(obj._Abc__y)
在类中,可以定义私有属性,方法:
_名称() -----》》 该受保护的属性,方法可以直接调用,原则上不能修改
__名称() -----》》 不能直接调用, 可以用 类名(或实例名)._类名__属性名(或方法名)
初始化 和 删除实例
class Abc:
def __init__( self,name ): # 类的固定方法,会在不同情况下自动调用,
self.name = name
..... .... 返回 sself 的数据属性,{}形式
print('初始化 ')
def __del__(self): # 定义了 删除 方法
print('正在删除实例')
obj = Abc('花痴') # 实例化时 自动调用 __init__
print(obj.name)
del obj # 删除 实例
增删改查的操作:
class CHinse:
coontry = 'CHinse'
def __init__(self,name):
self.name = name
def ply_ball(self,ball):
print( '%s正在打%s'%(self,name) )
# 查
print(CHinse.coontry) # ---》》CHinse
# 改
CHinse.coontry = 'japan'
print(CHinse.coontry) # ---——》》japan
p1 = CHinse('花痴')
print(p1.coontry) # ————》》黄色
# 增
CHinse.fu_se = '黄色'
print(CHinse.fu_se) # ————》》增加
print(p1.fu_se)
# why? :创建的是 实例,改的是类,通过 实例 引用的 类
# 删除
print(CHinse.__dict__)
del CHinse.fu_se
del CHinse.coontry
print(CHinse.__dict__)
# 下面方法的操作,
# 增
def eat_food(self,food):
print('%s正在吃%s'%( self.name, food ))
CHinse.eat = eat_food
p1.eat('饭') # ————》》 花痴正在吃饭
# 改
def abc(self):
print('abc')
CHinse.ply_ball = abc
p1.ply_ball() # ---->>> abc