代码改变世界

012: class and class objects > 初步了解

2016-01-11 22:06  Miles.Yao  阅读(346)  评论(1编辑  收藏  举报

终于开始学习面向对象的基础知识了,面向对象三大特点:

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)