2018lzn

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中, 函数名, 也是一个变量,

所以, 在这个 类空间中, 也只存在, 函数名 和 函数具体执行代码 的 地址

并不会存在具体的 函数执行代码

既然函数名也是一个变量, 也可以试试, 对其 进行增删改查.

 

posted on 2018-08-24 17:29  2018lzn  阅读(105)  评论(0编辑  收藏  举报

导航