python基础-类的反射】的更多相关文章

1)反射是通过字符串方式映射内存中的对象. python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr, 改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删除成员.  注意:类的反射不能使用类的私有方法 # -*- coding:utf-8 -*- __author__ = 'shisanjun' class Foo(object): def __init__(self): self.name="s" de…
python基础——类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同. 仍以Student类为例,在Python中,定义类是通过class关键字: class Student(object): pass class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的,…
Python基础-类 @(Python)[python, python基础] 写在前面 如非特别说明,下文均基于Python3 摘要 本文重点讲述如何创建和使用Python类,绑定方法与非绑定方法的区别,以及Python的多态与简单继承. 1. 面向对象编程 1.1 对象和类 面向对象这种思想其实只是人类思维在程序设计领域的一种自然延伸.程序设计领域将现实世界中事物自然延伸为"对象",事物拥有其属性和作用,对象也一样,拥有属性以及方法:复杂的面向对象程序就是基于一个个基本的对象,相互交…
python基础--类名称空间与对象(实例)名称空间 1 类名称空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类的良好总属性:数据属性和函数属性 其中类的数据属性是共享给所有对象 print(id(g1.camp)) #引用的地址是一样的 print(id(Garen.camp)) 输出结果为: 364617767096 364617767096 其中类的函数属性是绑定到所有对象 print(id(g1.attack)) #两个引用地址不一样 pr…
什么是类? 在python中,把具有相同属性和方法的对象归为一个类(class).类是对象的模板或蓝图,类是对象的抽象化,对象是类的实例化.类不代表具体的事物,而对象表示具体的事物. 类的创建 class Foo: def bar(self): pass 第一行定义了类名:语法是class 后面紧接着类的名字,这样来定义一个类.(Ps:类的名字,首字母,有一个不可文的规定,最好是大写,这样需要在代码中识别区分每个类.)第二行开始是类的方法,大家看到了,和函数非常相似,但是与普通函数不同的是,它的…
python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删除成员. import sys class WebServer(object): def __init__(self, host, port): self.host = host self.port = port def start(self): print("Server is starting....&q…
一.反射 最近接触到python的反射机制,遂记录下来已巩固.但是,笔者也是粗略的使用了__import__, getattr()函数而已.目前,笔者的理解是,反射可以使用户通过自定义输入来导入响应的module.class等.下面以一个例子说明. 文件目录如下, reflection文件夹下有Car module,现在main.py下通过反射机制导入Car module. Car.py源码如下: class Car(object): def __init__(self, name, color…
在python中,首字母大写的名称指的是类,这个类定义中括号的内容是空的. 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同. 1.创建简单的类和实例 class Dog(): #首字母大写的名称代表的是类,类定义中的括号是空的 """一次模拟小狗的简单尝试""" def __init__(self, name,…
一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性.如果直接使用类名修改其属性,那么将直接影响到已经实例化的对象 类的私有属性: __private_attrs  两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问.在类内部的方法中使用时 self.__private_attrs 类的方法 在类地内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个…
Python中一切事物都是对象. class Foo(object): def __init__(self,name): self.name = name f = Foo("alex") f对象是FOO类的一个实例,Foo类对象是type类的一个实例. print(type(f)) print(type(foo)) # -*- coding:utf-8 -*- __author__ = 'shisanjun' class Foo(object): def func(self): pri…
继承:承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”.“父类. 继承的过程,就是从一般到特殊的过程.要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现 继承概念的实现方式主要有2类:实现继承.接口继承. 实现继承是指使用基类的属性和方法而无需额外编码的能力 接口继承是指仅使用属性和方法的名称.但是子类必须提供实现的能力(子类重构爹类方法) 组合方式实现多继承 # -*- coding:utf-8 -*- __author__ = 'sh…
如果寂静定义了Person类,需要定义新的Student 和Teacher 类时 可以直接从Person 中继承 class Person(Object): def __init__(self,name,gender): self.name = name self.gender = gender 定义 Student 类时,只需要把额外的属性加上,例如:score class Student(Person): def __init__(self,name,gender,score): super…
说在前面的一点: python明明有私有的定义方法就是在变量或者方法的面前加上双下滑线__,这个实际上是python的伪私有.只是一种程序员约定俗称的规定,加了就表示私有变量,但是你如果要在外部调用的话,还是可以调用的. Python并没有真正的私有化支持,但可用下划线得到伪私有 (1)_xxx      "单下划线 " 开始的成员变量叫做保护变量,意思是只有类对象(即类实例)和子类对象自己能访问到这些变量,需通过类提供的接口进行访问:不能用'from module import *'…
反射 反射我们以后会经常用到,这个东西实现了动态的装配,通过字符串来反射类中的属性和方法 一.反射函数 1.hasarttr(obj,name_str) 作用:判断一个对象obj中是否有对应的name_str字符串的属性或者方法 class Dog(object): def __init__(self,name): self.name = name def eat(self,food): print("{0} is eating...{1}".format(self.name,food…
三大成员 在Python的面向对象中,主要包括三大成员:字段.方法.属性 字段 类成员的字段又可分为普通字段.静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同,代码示例如下: class Foo: #字段:静态字段 CC = 123 def __init__(self, name): # 字段:普通字段 self.name = name访问普通字段:obj = Foo('bob')print(obj.name)out: bob 访问静态字段:print(Foo.CC)o…
创建类 class people: '帮助信息:dsafdaf' #所有实例都会共享的 number=100 #构造函数,初始化的方法,当创建一个类的时候,首先会调用它 def __init__(self,name,age): self.name=name self.age=age def display(self): print('number=',people.number) def display_name(self): print(self.name) 调用类的帮助信息 people._…
对编程语言比较熟悉的朋友,应该知道“反射”这个机制.Python作为一门动态语言,当然不会缺少这一重要功能.然而,在网络上却很少见到有详细或者深刻的剖析论文.下面结合一个web路由的实例来阐述python的反射机制的使用场景和核心本质. 一.前言 ? 1 2 3 4 5 def f1():   print("f1是这个函数的名字!")    s = "f1" print("%s是个字符串" % s) 在上面的代码中,我们必须区分两个概念,f1和“…
面向对象编程之反射 反射 定义:通过字符串对对象的属性和方法进行操作. 反射有4个方法,都是python内置的,分别是: hasattr(obj,name:str) 通过"字符串"判断对象的属性或方法是否存在.返回bool值,True表示有,False表示没有. 注意:查询方法时,只需写方法名,不要加小括号!!! class User: def __init__(self, name, age, gender): self.name = name self.age = age self…
class CPerson: name = "default" __name2 = "inaccessable name" #类作用域内的变量可以被所有实例访问 def setname(self, name): #第一个参数self,是对象本身的引用,它也是方法和函数的重要区别元素,如果方法里面没有引用任何东西,可以不用有这个参数 self.name = name def getname(self): return self.name def greeting(se…
继承: 什么是继承: 继承是一种关系,描述两个对象之间什么是什么的关系 在程序中,继承描述的是类和类之间的关系 例如 a继承了b,a就能直接使用b已经存在的方法和属性了 a称之为子类,b称之为父类,成称之为基类或超类 为什么要使用继承: 继承一方可以直接使用被继承一方已经有的东西,其目的是为了重用已有的代码,提升了代码的重用性 如何使用继承: class 类名称(父类的名称): 类的内容 #在python中 一个子类可以同时继承多个父类 抽象:不具体.不清晰.很模糊.看的不懂的 将多个子类中的相…
介绍: new方法是类中魔术方法之一,他的作用是给类实例化开辟一个内存地址,并返回一个实例化,再由__init__对这个实例进行初始化,故它的执行肯定就是在初始化方法__init__之前了.new方法的第一个参数cls是类本身的含义(即你要实例化的类),与self不同,self是实例化本身,两者还是有很大的区别的. 在定义新式类时没有重新定义new()时 ,Python默认是调用该类的直接父类的new()方法来构造该类的实例,如果该类的父类也没有重写 new(),那么将一直按此规矩追溯至obje…
类的基本使用 class Person(): def __init__(self,name,age): self.name = name self.age = age def info(self): print(f'大家好,我是{self.name},我今年{self.age}岁了') xiaohua = Person('小花',21) xiaohua.info() 打印结果: 大家好,我是小花,我今年21岁了 python里面的类,架子大概就是这个样子,__init__就是构造函数,所有的方法…
一.isinstance(obj,cls)检查是否obj是类的cls对象 # -*- coding:utf-8 -*- __author__ = 'shisanjun' class Foo(object): pass f=Foo() print(isinstance(f,Foo)) #检查f是不是Foo的对象 class FooSub(Foo): pass print(issubclass(FooSub,Foo))#检查FooSub是不是Foo的子类…
经典类VS新式类区别 1)写法新式类class Person(object):#new style 经典类class Persion: #classical style 2)调用父类 新式写法用super 经典类直接写父类类名 3)多继承时继承顺序python3使用的是广度查询,所以两个都一样. 经典类python2是深度查询.所以经典类python2多继承是有BUG class D(B,C) D-->B-->A--C # -*- coding:utf-8 -*- __author__ = '…
封装:类中封装了公有属性和方法,对象封装了私有属性的值 class F1: def __init__(self,n): self.N=n print('F') class F2: def __init__(self,arg1): self.a=arg1 print('F2') class F3: def __init__(self,arg2): self.b=arg1 print('F3') ol=F1("alex) o2=F2(o1) 03=F3(02) """&…
一:类的方法说明 类的方法分为实例方法,析构方法,构造方法,类方法,静态方法,属性方法,等等 类方法和静态方法都可以被类和类实例调用,类实例方法仅可以被类实例调用 类方法的隐含调用参数是类,而类实例方法的隐含调用参数是类的实例,静态方法没有隐含调用参数 1)实例方法:类的实例能够使用的方法. 2) 析构方法:类中使用def __init__(self)定义的方法,也就是当该类被实例化的时候就会执行该函数.那么我们就可以把要先初始化的属性放到这个函数里面 3) 构造方法:__del__”就是一个析…
  一:类的属性 类的属性分为:类属性(公有属性),实例属性和私有属性. 1)类属性(公有属性(静态字段): 类定义时直接指定的属性(不是在__init__方法中),可以通过类名直接访问属性,并且保存在类的内存中,如果一个属性都有共同值就可以设置为公有属性. 2)实例属性: 在__init__方法中添加的属性,就是实例属性.实例属性保存在对象的内存中. 3)私有属性: 在__init__方法中定义,并且前面有两个__的属性:比如self.__heart="Normal" 这个就是私有属…
''' 类:模板(模子) 类的名称:类名(人) 类的属性:一组数据(年龄,身高) 类的方法:进行操作的方法(走,跑,吃,喝) 对象:实体 类的抽象:把现实中的物品用类去表示 ''' #创建一个类 class Xxx: #属性--类里面的变量 #__init__方法作用:初始化对象(设定基本的信息,在被调用的时候自动执行) def __init__(self,*args,**kwargs): self.name = args[0] self.age = args[1] print("%s,%s调用…
什么是面向对象: 面向对象是一种编程思想,其中的核心是对象,程序是一系列对象的集合,程序员负责调度控制这些对象来交互着完成某些任务. 在面向对象中程序员的角度发生改变,从具体的操作者变成了指挥者 面向对象的三大优点: 1.扩展性 2.灵活性 3.重用性 缺点: 1.程序的复杂度提高了 2.无法准确预知结果 使用场景: 对扩展性要就较高的程序,通常是直接面向用户的. 类和对象:OOP 类: 就是类型.类别,是一种抽象的概念,是一系列具备相同特征和相同行为的对象的集合 对象: 就是具体存在的某个事物…
反射 几个反射相关的函数可参考python基础(10)-匿名函数&内置函数中2.2.4反射相关 类的一些内置函数 __str__()&__repr__() 重写__str__()函数类似重写java中的toString()函数.当没有重写__str__()但重写了__repr__()函数时,__repr__()函数会充当一个__str__函数的替代函数执行 class Person1: def __init__(self, name, age): self.name = name self…