zoukankan      html  css  js  c++  java
  • 012: class and class objects > 初步了解

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

    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)
  • 相关阅读:
    es5中,一个在js中导入另一个js文件。
    移动端字体小于12号字的时候,line-height居中的问题
    初学者都能懂得 Git 说明
    一探 Vue 数据响应式原理
    文件的命名规则
    Vue 的 watch 和 computed 有什么关系和区别?
    MVC 与 Vue
    博客园皮肤设置
    java使用run和start后的线程引用
    Python改变一行代码实现二叉树前序、中序、后序的迭代遍历
  • 原文地址:https://www.cnblogs.com/jcsz/p/5120002.html
Copyright © 2011-2022 走看看