python第十五天
class 类的定义
python中类的学习, 相比编译型语言中的类,似乎更难理解,
因为 太灵活了, 或者说太不安全了
先来一个简单的 Person 类定义
1 class Person: 类名 是 Person, 注意 后面更 : 2 head = 1 head 和 ear 被称为 类的静态变量, 人类的共性, 头 有 1个, 耳朵 2个 3 ear = 2 4 5 def eat(self): eat 函数, 也称为 类的静态方法 6 print('在吃饭')
所谓 加了 静态, 就是说 这些加了静态的东西, 是属于 类的, 类可以使用 他们
1 print(Person.head) 1 2 print(Person.ear) 2 3 Person.eat(111) 在吃饭
Object-C 有 点语法 的说法, python 也可以借用一下.
点 ' . ' 的前面是类名, 代表 拥有者, 像 Person 拥有 hear, Person 拥有 ear,
Person中 没有定义 名字叫 hand的变量, 就不能调用, 直接 调用一个没有的东西, Person.hand 运行程序就会报错.
特点之一: 静态的变量可以修改
1 Person.head = 4 2 Person.ear = 8 3 4 print(Person.head) 4 5 print(Person.ear) 8
有点惊讶, 从 '静态' 字面的理解, 就是 动态 的另一面, 不能修改,
而python 尽然可以如此轻易就修改了, 意味着在程序任何地方, 只要知道 类名, 就可以修改 类变量 中的值,
在团队合作开发中, 这极其不安全. 设想一下, 一个小伙伴改了, 另一个小伙伴用了,肯定就出错了.
所以, 对于 ptyhon, 类中 定义的静态变量, 叫 类中的变量 , 更适合
特点之二: 类中定义的变量, 可以删除
1 del Person.head 删除 指令, 删除 Person 类 中 定义的 head 变量 2 3 print(Person.head) error: type object 'Person' has no attribute 'head'
这在编译型语言看来, 可能是无法想象的
特点之三: 类中定义的变量, 还可以随时增加
1 Person.hand = 2 2 3 print(Person.hand) 2
可以调用 __dict__ , 在 hand 变量, 增加 前 后, 进行验证
print(Person.__dict__)
特点之四: 类 中的方法定义, 第一个参数, 都要加上 self 关键字
类名, 也可以通过点语法, 调用 类中定义的方法
Person.eat(111) 在吃饭
使用类名调用类中定义的方法时, 关于传值, 必须传值, 传什么都可以, 类中的方法, 就被调用了
程序在执行 遇到 类定义时, 是如何操作的呢?
会开辟一个 新的内存空间, 程序 类的空间, 名字 就叫Person.
在这个空间存放着, 变量名 和 变量中值的地址 的对应关系
在python中, 函数名, 也是一个变量,
所以, 在这个 类空间中, 也只存在, 函数名 和 函数具体执行代码 的 地址
并不会存在具体的 函数执行代码
既然函数名也是一个变量, 也可以试试, 对其 进行增删改查.