1. '''类:一类事物的抽象,用于定义抽象类型
    实例:类的单个实际描述
    如:人是一个类,而单个人是一个实例
    用class来创建一个类,调用一个类来创建一个实例'''
    class Person:
    pass
    xiaoming = Person()
    xiaoming.name = 'xiaoming' # 创建实例属性,xiaoming的名字是xiaoming
    xiaoming.age = 19 # 创建实例属性,xiaoming的年龄是19岁
    p1 = Person()
    p1.name = 'Bart'
    p2 = Person()
    p2.name = 'Lisa'
    p3 = Person()
    p3.name = 'Adam'
    L1 = [p1, p2, p3]
    L2 = sorted(L1, key=lambda x: x.name)
    print(xiaoming.name, xiaoming.age)
    print(L2[0].name, L2[1].name, L2[2].name)
    class Person2(object):
    def __init__(self, name, age): # __init__方法在调用类时会自动执行,而且参数中self是必须会有的,后面可以跟上自己想要的参数
    self.name = name
    self.age = age
    p4 = Person2('xiaoming', 19)
    print(p4.name, p4.age)
    class Person3(object):
    def __init__(self, name, gender, birth, **kw):
    self.name = name
    self.gender = gender
    self.birth = birth
    for k, v in kw.items(): # 在python3中移除了iteritems()方法
    setattr(self, k, v)
    xiaoming = Person3('Xiao Ming', 'Male', '1990-1-1', job='Student')
    print(xiaoming.name)
    print(xiaoming.job)
    '''解释器内部会将 ** kw拆分成对应的dict.
    setattr()
    方法接受3个参数:setattr(对象,属性,属性的值)
    此方法可以用来设置属性的值
    setattr(self, k, v)
    相当于self.k = v
    kw.iteritems()
    历遍字典kw的所有key和value,分别匹配k,v
    '''
    class Person5(object):
    def __init__(self, name, score):
    self.name = name
    self.__score = score
    p = Person5('Bob', 59)
    # __xx表示该属性不能被外部访问且不能在子类中使用,__xx__表示可以被外部访问,_x表示可以在子类中使用
    print(p.name)
    try:
    print(p.__score)
    except AttributeError:
    print('attributeError')
    # 类也可以有自己的属性,如下所示:
    class Person6(object):
    count = 0
  2.  
  3. def __init__(self, name):
    Person6.count = Person6.count + 1
    self.name = name
    p1 = Person6('Bob')
    print(Person6.count)
    # => 1
    p2 = Person6('Alice')
    print(Person6.count)
    # => 2
    p3 = Person6('Tim')
    print(Person6.count)
    # => 3
    # 类属性是可以被类中的方法调用的,所有的类的实例也可以访问它所属的类的属性,但是当实例属性与类属性重名时,实例属性优先级高,它将屏蔽对类属性的访问。
    class Person7(object):
    __count = 0
    def __init__(self, name):
    self.__name = name
    Person7.__count += 1
    print(Person7.__count)
    def get_name(self):
    return self.__name
    p1 = Person7('Bob')
    p2 = Person7('Alice')
    try:
    print(Person7.__count)
    except AttributeError:
    print('AttributeError')
    print(p1.get_name())
    print(p1.get_name)
    # 上面的代码说明类的实例真的可以访问它所属的类的属性...emmmmmm...好像重复了...
    '''可见,千万不要在实例上修改类属性,它实际上并没有修改类属性,而是给实例绑定了一个实例属性.
    还可以定义实例方法....emmmmm.感觉python中的类和java的类差不多呀...
    实例方法也是属性,它实际上是一个函数对象,而types.MethodType()可以把一个函数变成一个方法
    所以说上面的p1.get_name是函数对象,而p1.get_name()才是方法调用
    简单来说,在类的外面的是函数,内部的方法。
  4.  
  5. 用法区别:调用方法时,解释器会自动传入self参数,而调用普通函数则不会
    函数不需要和实例对象 self 做绑定,而方法必须要和 self 绑定
    '''
    #在class中定义的是全部都是实例方法,实例方法的第一个函数参数是self,即实例本身,通过标记@classmethod可以将方法绑定到类上变成类方法,类方法的第一个参数通常是类本身,命名为cls
    class Person8(object):
  6.  
  7. __count = 0
    @classmethod
    def how_many(cls):
    return cls.__count
    def __init__(self,name):
    Person8.__count+=1
    self.name=name
    print (Person8.how_many())
    p1 = (Person8('Bob'))
    print (Person8.how_many())

py面向对象编程基础的更多相关文章

  1. 第二章 Matlab面向对象编程基础

    DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的.笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab ...

  2. [.net 面向对象编程基础] (1) 开篇

    [.net 面向对象编程基础] (1)开篇 使用.net进行面向对象编程也有好长一段时间了,整天都忙于赶项目,完成项目任务之中.最近偶有闲暇,看了项目组中的同学写的代码,感慨颇深.感觉除了定义个类,就 ...

  3. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

  4. [.net 面向对象编程基础] (2) 关于面向对象编程

    [.net 面向对象编程基础]  (2)  关于面向对象编程 首先是,面向对象编程英文 Object-Oriented Programming 简称 OOP 通俗来说,就是 针对对象编程的意思 那么问 ...

  5. [.net 面向对象编程基础] (3) 基础中的基础——数据类型

    [.net 面向对象编程基础] (3) 基础中的基础——数据类型 关于数据类型,这是基础中的基础. 基础..基础..基础.基本功必须要扎实. 首先,从使用电脑开始,再到编程,电脑要存储数据,就要按类型 ...

  6. [.net 面向对象编程基础] (4) 基础中的基础——数据类型转换

    [.net面向对象编程基础] (4)基础中的基础——数据类型转换 1.为什么要进行数据转换? 首先,为什么要进行数据转换,拿值类型例子说明一下, 比如:我们要把23角零钱,换成2.30元,就需要把整形 ...

  7. [.net 面向对象编程基础] (5) 基础中的基础——变量和常量

    [.net面向对象编程基础]  (5) 基础中的基础——变量和常量 1.常量:在编译时其值能够确定,并且程序运行过程中值不发生变化的量. 通俗来说,就是定义一个不能改变值的量.既然不能变动值,那就必须 ...

  8. [.net 面向对象编程基础] (6) 基础中的基础——运算符和表达式

    [.net 面向对象编程基础] (6) 基础中的基础——运算符和表达式 说起C#运算符和表达式,小伙伴们肯定以为很简单,其实要用好表达式,不是一件容易的事.一个好的表达式可以让你做事半功倍的效果,比如 ...

  9. [.net 面向对象编程基础] (7) 基础中的基础——流程控制语句

    [.net 面向对象编程基础] (7) 基础中的基础——流程控制语句 本来没有这一节的内容,后来考虑到既然是一个系列文章,那么就尽可能写的详细一些,本节参考了网上朋友所写的例子,为的是让更多小伙伴学习 ...

随机推荐

  1. 量化投资_TB交易开拓者A函数和Q函数详解

    //////////////////A函数详解/////////////// //A函数主要在端口上进行下单操作//////////////// A_AccountID说明 返回当前公式应用的交易帐户 ...

  2. python,pandas, DataFrame数据获取方式

    一.创建DataFrame df=pd.DataFrame(np.arange(,).reshape(,)) my_col=dict(zip(range(),['A','B','C'])) df.re ...

  3. CGLIB原理及实现机制

    https://blog.csdn.net/gyshun/article/details/81000997

  4. mysql truncate 的问题

    问题是微信群里一伙计提的 `mysql truncate 空表都需要3 4秒,要优化解决` 一开始觉得这莫名其妙,因为作这种操作的都是后台运维,不是实时的对外服务,运维又不差这3秒 其反应trunca ...

  5. 系统学习Javaweb6----JavaScript2

    感想:感觉自己还是只是学到皮毛,仍需继续努力,明天开始需要学习Android和阅读感想的书写. 学习笔记: 2.3.运算符 JavaScript运算符与java运算符基本一致. 这里我们来寻找不同点进 ...

  6. conditon 实现等待/通知

    synchronized 与wait() 和notify() notifyAll() 方法相结合可以实现等待 通知 ReetrantLock也可以实现同样的功能 需要借助condition对象,一个l ...

  7. IDEA+selenium3+火狐/谷歌驱动 JAVA初步环境搭建 笔记

    0 环境 系统环境:win7 selenium驱动 谷歌浏览器以及驱动 火狐浏览器以及驱动 1 驱动地址的下载 1.1 selenium jar包 https://www.seleniumhq.org ...

  8. 双因子方差分析|adjusted R|强度|SSA|SSE|SST|

    应用统计学 方差分析的基本假设: 组间组平均与总平均的不同是由treatment引发的.单个值与组平均的不同是由组内error引发的. 如果没有处理误差SSA=SSE,所以右尾假设如果F>1则处 ...

  9. keep pace with |sixes and sevens.|Three dozen of |setting out|in despite of|appetite for|brought up|.turn to|leave behind|As can be seen|every

    Heavy but not excessive: network capacity seems to have done little more than keep pace with economi ...

  10. 几个简单又实用的PHP函数

    简单方便使用: /** * 将多维数组转为一维数组 * @param array $arr * @return array */ function ArrMd2Ud($arr) { #将数值第一元素作 ...