终于开始学习面向对象的基础知识了,面向对象三大特点:
1. 继承
2. 多态
3. 封装
程序的世界只有两种元素:数据,算法。 算法一直试图改变数据,得到一种新的数据。
类的功能也就是把数据和算法放到一起,这中写法改变了代码的格局,更适合人的思维,因此一经推出便得到了长足的发展。
Pyhong的类个人感觉是做了一个融合,把javascript当中的对象思想和其他语言的类的思想融合在了一起,下面的例子将简单的介绍一些基本概念。
1. 对象相对于类是可以变化的,这个是javascript里面的对象所拥有的属性。
class Human(object): pass def say_hello(): print('hello') Tom = Human() Tom.name = 'Tom' Tom.age = 21 Tom.say_hello = say_hello print(Tom.age) Tom.say_hello
2. 对象的初始化
大部分面向对象的编程语言都会有一个构造函数的特殊方法,用于创建对象的时候初始化对象。Python却不太一样,Python有两个这样的函数,一个是初始化函数,一个是构造函数,正常情况下,构造函数几乎不会用到。
所以重点学习初始化函数,初始化函数其实也很简单,名字比较特别,__init__
import math class Point: def __init__(self, x = 0, y = 0): self.move(x, y) def move(self, x, y): self.x = x self.y = y def reset(self): self.x = 0 self.y = 0 def calculate_distance(self): return math.sqrt(self.x ** 2 + self.y ** 2) point = Point(3, 4) print(point.calculate_distance())
3. 对象成员的私有性
在Python中是不支持私有变量的,但是有一个方式,可以让使客户端不能直接调用该变量:对某个属性加一个双下划线的前缀,这样使得该属性会自动添加上一个_ClassName的前缀。
class SecretString: def __init__(self, plain_string): self.__plain_string = plain_string def get_plain_string(self): return self.__plain_string s = SecretString('hello world') print('s.get_plain_string =', s.get_plain_string()) print('s._SecretString.__plain_string =', s._SecretString__plain_string) print(s.__plain_string)
4. 对象的属性
Python中并不严格区分属于类的成员和属于对象的成员,类的成员可以通过类名来访问也可以通过对象来访问。对象的成员只能通过对象来访问。
1)值类型的类的属性
class Human(object): ancestor = '' def __init__(self, name): super(Human, self).__init__() self.name = name Tom = Human('Tom') Tom.ancestor = 'Monkey' print(Tom.ancestor) Jim = Human('Jim') Jim.ancestor = 'Pig' print(Jim.ancestor)
2)引用类型的类的属性
class Human(object): ancestor = [] def __init__(self, name): super(Human, self).__init__() self.name = name Tom = Human('Tom') Tom.ancestor.append('Tom') Jim = Human('Jim') Tom.ancestor.append('Jim') print('Tom.ancestor =',Tom.ancestor) print('Jim.ancestor =',Jim.ancestor)