在学习dict的时候,肯定听过dict是Python中最重要的数据类型,但是不一定知道为什么.马上你就会明白原因了. Python中从模块.到函数.到类.到元类,其实主要管理方法就是靠一个一个的字典. 函数dir 先来学一个重要的内置函数. dir返回一个列表. 列表中包含了实例的属性名,实例的类的属性名,实例的所有超类的属性名. 如果你想获取一个对象所有有效属性,你应该使用dir()来替代__dict__或者__slots__. 我们先来写一个没有什么实际意义的module. a.py pri…
什么是描述符类? 根据鸭子模型理论,只要具有__get__方法的类就是描述符类. 如果一个类中具有__get__和__set__两个方法,那么就是数据描述符,. 如果一个类中只有__get__方法,那么是非数据描述符. __get__:当我们用类或者实例来调用该属性时,Python会返回__get__函数的结果. __set__:当我们用实例来设置属性值时,Python会调用该函数.对类没有限制作用. __delete__:当我们用实例试图删除该属性时,Python会调用该函数.对类没有限制作用…
一句话说明 __slots__是用来限制实例的属性的,__slots__可以规定实例是否应该有__dict__属性:__slots__不能限制类的属性. 只有__slots__列表内的这些变量名可赋值为实例属性. class A: __slots__=['name'] def __init__(self): self.name='js' self.age=22 a=A() 运行结果: Traceback (most recent call last): File "a.py", lin…
元类的介绍 请看位于下面网址的一篇文章,写的相当好. http://blog.jobbole.com/21351/ 实例补充 class Meta(type): def __new__(meta, cls, parent, attr_dict): res = super(Meta, meta).__new__(meta,cls, parent, attr_dict) print('meta new stage, %s is %s, %s is %s' % (meta, type(meta), c…
静态方法:只是名义上归类管理,实际上在静态方法里访问不了类或实例中的任何属性. 在类中方法定义前添加@staticmethod,该方法就与类中的其他(属性,方法)没有关系,不能通过实例化类调用方法使用类变量,只能单纯的使用方法本身. class dog(object): def __init__(self,name): self.name=name def eat(self,food): print '%s吃%s'%(self.name,food) a=['q','a','z'] for i i…
1 类相关函数- issubclass:检测一个类是否是另一个类的子类- isinstance:检测一个对象是否是一个类的实例- hasattr:检测一个对象是否由成员xxx- getattr: get attribute- setattr: set attribute- delattr: delete attribute- dir: 获取对象的成员列表 2 类的成员描述符(属性)- 类的成员描述符是为了在类中对类的成员属性进行相关操作而创建的一种方式 - get: 获取属性的操作 - set:…
大家在做java开发时,肯定会遇到api层参数对象传递给服务层,或者把service层的对象传递给dao层,他们之间又不是同一个类型对象,但字段又是一样,如果还是用普通的get.set方式来处理话,比较繁琐,.... 那么你来跟我学....."天下武功,唯快不破"===>要的就是快....1.使用get/set不用说了,字段一多脑壳大....2.BeanCopier 使用了cglib的修改字节码,真的是动态Read Writer getter/setter 快的一逼啊 源码过于简…
object.__getattribute__(self, name) 类中的数据描述符 object.__dict__.get(name) 自身属性字典 object.__class__.__dict__.get(name) 类属性字典 / 非数据描述符 object.__getattr__(name) 找到一个(Repo)[https://github.com/mzohaibqc/python-attribute-lookup],里面有很棒的流程图. Object Attribute Loo…
#coding:utf-8class RoundFloat(object): def __init__(self,val): assert isinstance(val, float),"value must be a float" self.value = round(val,2) def __str__(self): return "{:.2f}".format(self.value) __repr__ = __str__ #def __repr__(self)…
私有属性是对象不希望公开的属性,私有方法是对象不希望公开的方法.在定义私有属性和私有方法时,在属性或者方法前,加上__(两个下划线) 公有方法可以通过对象名直接调用,私有方法不能通过对象名直接调用,只能在属于对象的方法中通过self调用或在外部通过Python支持的特殊方式来调用 继承中私有属性和私有方法问题:子类不能继承父类的私有属性,不能调用父类的私有方法. 父类中的私有属性和私有方法: 1.子类对象不能在自己的方法内部,直接访问父类的私有属性和私有方法 2.子类对象可以通过父类的共有方法简…
以下方法为高级方法,一般来说没什么卵用 1.静态方法 @staticmethod 相当于把类内的函数从类内独立出来,只是名义上归类管,实际上不可以调用类内的变量和函数 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量,但静态方法是不可以访问实例变量或类变量的,一个不能访问实例变量和类变量的方法,其实相当于跟类本身已经没什么关系了,它与类唯一的关联就是需要通…
静态方法 通过@staticmethod来定义,静态方法在类中,但在静态方法里访问不了类和实例中的属性,但静态方法需要类来调用 # -*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" class Person(object): def __init__(self,name): self.name = name @staticmethod def eat(self,food): print("%s is eating %s"…
一.类中的方法 普通方法: 没有参数,只能类调用绑定方法: (1)绑定到对象(自动传递对象参数) (2)绑定到类(自动传递参数)静态方法: 无论是类还是对象,都能调用的方法#例:class Dog():    def __init__(self,name):        self.name = name #普通方法    def jiao():        print("小狗会叫") #绑定到对象方法    def tian(self):        print("小狗…
总结:和类的关联性讲:属性方法>类方法>静态方法 属性方法@property:仅仅是调用方式不用+括号. 类方法@classmethod:访问不了累的属性变量,只可以访问类变量. 静态方法@staticmethod:仅仅是通过类名来调用这个函数而已,和类本身已经没有功能关系了,严格讲已经不是类的方法而是一个通过类名调用的函数而已(无法访问实例化的类的任何属性过着其他方法). 在类中的方法加如下装饰器 属性方法:@property将方法变为类的一个静态属性,调用的时候无需加括号.对外隐藏实现细节…
[面试必问]python实例方法.类方法@classmethod.静态方法@staticmethod和属性方法@property区别 1.#类方法@classmethod,只能访问类变量,不能访问实例变量,通过cls参数传递当前类对象,不需要实例化,直接[类名.方法名()],可通过类对象和类对象实例访问 2.#静态方法@staticmethod,名义归类管,实际跟类没关系,跟类关联截断了,是类下单独的函数,可以不传递任何参数,不需要实例化,直接[类名.方法名(),可通过类对象和类对象实例访问 3…
静态方法.类方法和属性方法 在 Python 中有三种常用的方法装饰器,可以使普通的类实例方法变成带有特殊功能的方法,分别是静态方法.类方法和属性方法. 静态方法 / Static Method 在 def 定义之前加上 @staticmethod 进行装饰,便可以使该方法成为静态方法,静态方法无法调用实例属性.静态方法可以通过实例或类进行调用.通常用于无需生成实例或无需共享实例属性的方法中,比如一些纯粹的数学公式计算等场合. class Foo(): @staticmethod def foo…
1.先叙述静态方法: 我们知道Python调用类的方法的时候都要进行一个实例化的处理.在面向对象中,一把存在静态类,静态方法,动态类.动态方法等乱七八糟的这么一些叫法.其实这些东西看起来抽象,但是很好理解.这里面有一个难点就是静态方法的理解,我们先叙述这个概念. 比如在C#语言中,我们一般在在一个类前面加上类似于staci这样的关键字 public 类名{ static void 方法(){ } } 一般这个时候方法可以直接用“类名.方法名”的方式直接调用类中的方法.其实这种方法叫做直接引用的方…
TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. 常规的用法大家都知道,现在来讨论它的一些高级的用法. 先把要讨论的几个属性列出来: 1.CommaText 2.Delimiter & DelimitedText 3.Names & Values & ValueFromIndex 先看第一个:CommaText.怎么用呢?用代码说话: const constr :String = 'aaa,bbb,ccc,ddd'; var strs :TStrings…
一.面向对象的程序设计 1.面向过程 VS 面向对象 (1)编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种不同的方式,对这些不同的编程方式的特点进行归纳总结得出来的编程方式类别,即为编程范式.不同的编程范式本质上代表对各种类型的任务采取的不同的解决问题的思路,大多数语言只支持一种编程范式,当然也有些语言可以同时支持多种编程范式.两种最重要的编程…
Methods (方法) 实例方法(Instance Methods) 我认为看到这里.我们唯能八一八的就是swift的自做主张的行为了,反正它就是会以各种方式帮助我们来完毕让代码看起来非常奇怪的事情... 在之前函数那一篇笔记中,我们已经看到过參数的外部名字和内部名字的区分了,当然.在实例方法中,这个事情依旧存在,并且.swift又会帮我们做一些潜规则. swift在默认的情况下,会为方法的第一个參数仅仅提供函数内部使用的名字,而从第二个參数開始,既能够外部用,也能够内部用(就像我们在函数中见…
1. 面向对象的概念 1)类是一类抽象的事物,对象是一个具体的事物:用类创建对象的过程,称为实例化. 2)类就是一个模子,只知道在这个模子里有什么属性.什么方法,但是不知道这些属性.方法具体是什么: 所以,我们要在这个模子的基础上 造出一个具体的实例(对象),这个实例就会具体化属性.方法 3)所有的数据类型都是类,都是抽象的:根据数据类型定义变量,该变量就是一个具体的值(对象). 面向过程 --> 面向对象的转变 定义一个函数   <==> 定义一个类 函数的返回值(字典)   <…
大家都知道Java类中的私有的(private)属性是获取不到的(即使使用继承依然获取不到),那如果非要获取私有属性的值怎么办呢?一般的做法是将该java类封装称为一个JavaBean,即封装该私有属性,提供一对共有的get,set方法来访问私有属性.一般情况下都会这样做!但遇到特殊情况呢?比如,先现有一个需求:访问一个Java类的私有属性,并且该类不提供访问该私有属性的共有方法!下面就为大家介绍一种方法访问java类的私有属性. 要获取java类的私有属性就不得不先介绍一个类PropertyD…
方法的重载概念:方法的重载指的就是方法的名称相同给,但是参数不同.参数不同,分为两种情况1).如果参数的个数相同,那么参数的类型就不能相同.2).如果参数的类型相同,那么参数的个数就不能相同.***方法的重载跟返回值没有关系. .静态和非静态的区别1).在非静态类中,既可以有实例成员,也可以有静态成员.2).在调用实例成员的时候,需要使用对象名.实例成员; 在调用静态成员的时候,需要使用类名.静态成员名;总结:静态成员必须使用类名去调用,而实例成员使用对象名调用. 静态函数中,只能访问静态成员,…
__proto__: 这个属性是实例对象的属性,每个实例对象都有一个__proto__属性,这个属性指向实例化该实例的构造函数的原型对象(prototype). proterty:这个方法是对象的属性.(据说和一个对象的attr类似,比如dom对象中) prototype:每个构造函数都有一个prototype对象,这个对象指向该构造函数的原型. 对象自身属性方法和原型中的属性方法的区别: 对象自身的属性和方法只对该对象有效,而原型链中的属性方法对所有实例有效. 例子: function bas…
1.属性方法 class Student(object): def __init__(self,name): self.name = name @property #属性方法:把一个方法变成一个静态的属性或者变量. def fly(self): print('{} fly...'.format(self.name)) a = Student('wdc') a.fly #可以用调用属性的方式调用属性方法 2. class Student(object): def __init__(self,nam…
如何创建可管理的对象属性 问题举例 在面向对象编程中, 我们把方法看作对象的接口, 直接访问对象的属性可能是不安全的,或设计上不够灵活. 但是使用调用方法在形式上不如访问属性简洁. circle.get_radius() circle.set_radius(5.0)  #繁琐 circle.radius circle.radius = 5.0   #简洁 能否在形式上是属性访问,但实际上是内部调用方法? 解决思路 使用property函数为类创建可管理属性,fget/fset/fdel对应相应属…
一.Python面向对象中的新旧式类 1)新式类(推荐使用):在定义类时,类后边括号里要继承基类(object).在python3.x中若没有指定父类,会默认使用的是object作为基类:在python2.x中,若没指定父类,则不会以object作为基类. 2)旧式类(经典类):在定义类时,类后边括号中不用继承object类,甚至不用括号. 3)dir方法是用来查看类的内置方法. 二.私有方法和属性 1)私有属性是对象不希望公开的属性:私有方法是对象不希望公开的方法.在定义私有属性和方法时,在属…
类属性与方法 类的私有属性 __private_attrs: 两个下划线开头,表明为私有,外部不可用,内部使用时self.__private_attrs. 类的方法 在类的内部,使用 def 关键字来定义一个方法,类方法必须包含参数 self,且为第一个参数.self的名称也可自己取,如使用this,但是建议还是用self为好. 类的私有方法 __private_method: 两个下划线开头,为私有方法,只能在类的内部调用 ,不能在类的外部调用.self.__private_methods.…
一.多继承 案例1:小孩继承自爸爸,妈妈.在程序入口模块再创建实例调用执行 #father模块 class Father(object): def __init__(self,money): self.money = money def play(self): print("play") def eat(self): print("eat") #mother模块 class Mother(object): def __init__(self,faceValue):…
封装基础 广义上面向对象的封装:代码的保护,面向对象的思想本身就是一种封装 只让自己的对象能调用自己类中的方法 狭义上的封装-面向对象三大特性之一(私有变量,用公有的方法封装私有属性,方法叫封装) 把属性和方法都藏起来,不让你看见 类的特性 所有的私有,都是在变量左边加双下划线 所有的私有,都不能在类的外部使用 对象的私有属性 类的私有方法 类中私有的静态属性 class Person: def __init__(self, name, password): __key = 123 #静态私有属…