面向对象
语法
类:具有相同方法和属性的一类事物 例如 桌子 电脑 猫
对象:具有具体的属性值的实际存在的例子 例如 周杰伦 江疏影
用class来描述一个类
class 类名: 创建一个类 类名通常为以大写字母开头的单词
class Dog:
变量1 = 100
变量2 = 'ab'
变量3 = [a,v,d,s] 变量可以是任何数据类型
print(Dog.变量) 常用查看类中的变量的方法
print(Dog.__dict__['变量']) 方法二
实例化
对象也是实例,创建一个对象就是创建一个实例,这个过程叫做实例化
实例化的过程
在内存中开辟了一块空间
创建了一个 self 变量来指向这块空间
调用 init 自动传 self 参数 其他的参数都是按照顺序传进来的
执行init 将 self 自动返回给调用者
类名加括号的方式可以创建一个对象
class Dog: def __init__(self,name,hp,ad,sex): print('执行') self.dict['name'] = name 不常用 self.blood = hp self.ad = ad self.sex = sex self 其实上是由python的语法开辟出了一个属于具体的对象的空间 qu = Dog('qu',20,10,'man') 传参的过程中 qu = self (对象/实例) print(qu.name) 引用实例变量/引用对象属性 leng = Dog('leng',10,5,'sb') (对象/实例) print(leng.ad)
执行 init 向 self 这类空间管理的字典中添加一些 key value, self 会自动的被返回
一切皆对象
数据类型也是类
对象就是具体的内容
class Dog:
a = 100 a就是静态变量 这个类中的变量 是所有对象共享的值 所有静态变量的值都尽量用类名去操作
def __init__(pass) 初始化方法
(对象资源)
示例函数
class Dog: def __init__(self,name,hp,ad,sex): self.name = name self.hp = hp self.ad = ad self.sex = sex def bite(self,person) person.hp -= self.ad print('%s攻击了%s,造成了%s点伤害'%(self.name,person.name,self.ad)) class Person: def __init__(self,name,hp,ad,sex): self.name = name self.hp = hp self.ad = ad self.sex = sex def fight(self,dog) dog.hp -= self.ad print('%s攻击了%s,造成了%s点伤害'%(self.name,dog.name,self.ad)) hei = Dog('小黑',20,10,'?') pdd = Person('PDD',100,20,'man') hei.bite(pdd) print(pdd.hp) pdd.fight(hei) print(hei.hp)
里面的def fight(self,dog) 属于动态变量/方法 是只属于Person的方法
类名 可以调用所有定义在类中的名字
对象名 可以调用所有定义在对象中的属性
变量 函数名
在 init 函数和 self 相关的调用函数 且调用函数的时候 会把当前的对象当作第一个参数传递给 self
向对象的内存空间添加
可以通过 init 在类的内部完成 也可以通过对象名在类的外部完成
也可以通过在类的外部通过对象名来修改属性的值
删除
del pdd.name 删除 pdd.name 这条属性