四十一、python面向对象二

A、成员:    1.字段:静态字段(每个对象都有同一字段),普通字典(每个对象都有不同的数据)    2.方法:静态方法(无需使用对象的内容),类方法,普通方法(使用对象中的数据)    3.特性:普通特性(将方法伪造成字段)   通过类去访问的有:静态字段,静态方法,类方法   通过对象去访问的有:普通字段,类的方法   自己的成员自己去访问   静态方法:没有self,前添加@staticmethod,即为静态方法(通过类去访问)   类方法:比静态方法多一个参数,该参数是为了显示哪个类,前添加@classmethod   特性:将方法未造成字段来执行,前添加@property

快速判断,类执行,对象执行    self 对象调用    无self 类调用test01
class Provice:

#静态字段,类中    country="China"

def __init__(self,name):

#普通字段,对象中        self.name=name

#普通方法,类中    def show(self):        print("show")

#静态方法    @staticmethod    def add():        print("加法")

#类方法,多一个参数    @classmethod    def dev(cls):        print("减法",cls)

#特性,将方法未造成字段来执行    @property    def csv(self):        print("csv")

#设置csv中的值,3个csv处名字必须相同    @csv.setter    def csv(self,value):        print(value)pro=Provice("山东")print(Provice.country)print(pro.name)Provice.add()print(Provice.dev())print(pro.csv)pro.csv="123456"-------------------------------------------------

  China
  山东
  加法
  减法 <class ‘__main__.Provice‘>
  csv
  123456

B、利用反射导入模块、查找类、创建对象、查找对象中的字
imp=__import__("test01",fromlist=True)print(imp)

class_name=getattr(imp,"Foo")print(class_name)

r=class_name(‘zhangyu‘)print(r)print(getattr(r,‘name‘))----------------------------------------

  <module ‘test01‘ from ‘F:\\myworkspacedirectory\\Function\\member\\test01.py‘>
  <class ‘test01.Provice‘>
  <test01.Provice object at 0x00000247FEFC79E8>
  zhangyu

C、成员修饰符成员:    字段:静态字段(每个对象都有同一字段),普通字典(每个对象都有不同的数据)    方法:静态方法(无需使用对象的内容),类方法,普通方法(使用对象中的数据)    特性:普通特性(将方法伪造成字段)两种:共有的,私有的(两个下划线开头,只有自己能使用,派生类也不能访问)
class Provice:

 #静态字段,类中    country="China"

#私有字段,供内部使用    __country = "Eglish"

def __init__(self,name,name1):

#普通字段,对象中        self.name=name        #私有的有普通字段        self.__name1=name1

def __add(self):        print("__add")

@staticmethod    def __dev():        print("__dev")

# 普通方法,类中    def show(self):        print("show")        print(Provice.__country)        self.__name1="666"        self.__add()        self.__dev()

@staticmethod    def mm():        Provice.__dev        Provice.__name1 = "6661"

obj=Provice("zhangyu","nnn")print(Provice.country)  #错误情况#print(Provice.__country)obj.show()Provice.mm()---------------------------------------------

  China
  show
  Eglish
  __add
  __dev

D、类的特殊成员1__init____del____call__===>Djangoxxx.__dict__:可查看类中的成员
class Foo:    ‘‘‘    我是类的注释    ‘‘‘    country="zhongguo"

def __init__(self):        self.name="666"

def __call__(self, *args, **kwargs):        print("call")        return 1

def __getitem__(self, item):        print(item,type(item),"__getitem__")

def __setitem__(self, key, value):        print(key,value,"__setitem__")

def __delitem__(self, key):        print(key,"__delitem__")

def add(self):        print("1")

# r=Foo()()# print(r)

r=Foo()         #------------->执行initr()             #------------------>执行__call__r[‘k1‘]         #------------------>执行__getitem__r[‘k2‘]=‘666‘   #------------------>执行__setitem__del r[‘xxx‘]    #------------------>执行__执行__delitem__r[1:5:2]        #2.7执行getslice  3.0执行getitemr[1:3:3]=[11,22,33,44,55,66]  #2.7执行setslice  3.0执行setitemdel r[1:3:3]    #2.7执行detslice  3.0执行detitem

print(r.__dict__)print(Foo.__dict__)----------------------------------------------

  call
  k1 <class ‘str‘> __getitem__
  k2 666 __setitem__
  xxx __delitem__
  slice(1, 5, 2) <class ‘slice‘> __getitem__
  slice(1, 3, 3) [11, 22, 33, 44, 55, 66] __setitem__
  slice(1, 3, 3) __delitem__
  {‘name‘: ‘666‘}

{‘__module__‘: ‘__main__‘, ‘__doc__‘: ‘\n 我是类的注释\n ‘, ‘country‘: ‘zhongguo‘, ‘__init__‘: <function Foo.__init__ at 0x000001C307CB8950>, ‘__call__‘: <function Foo.__call__ at 0x000001C307CB89D8>, ‘__getitem__‘: <function Foo.__getitem__ at 0x000001C307CB8A60>, ‘__setitem__‘: <function Foo.__setitem__ at 0x000001C307CB8AE8>, ‘__delitem__‘: <function Foo.__delitem__ at 0x000001C307CB8B70>, ‘add‘: <function Foo.add at 0x000001C307CB8BF8>, ‘__dict__‘: <attribute ‘__dict__‘ of ‘Foo‘ objects>, ‘__weakref__‘: <attribute ‘__weakref__‘ of ‘Foo‘ objects>}

E、iter:类的特殊成员2
class Foo:

def __iter__(self):        yield 1        yield 2        yield 3        yield 4

obj=Foo()#如果执行for对象时,自动会执行对象的iter方法,生成器for i in obj:    print(i)----------------------------------------------------1234



原文地址:https://www.cnblogs.com/chushujin/p/9463556.html

时间: 2024-08-24 06:56:25

四十一、python面向对象二的相关文章

第三十四篇 Python面向对象之 反射(自省)

什么是反射? 反射的概念是由Smith在1982年提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成就. 四个可以实现自省的函数,是Python的内置函数 下列方法适用于类和对象 先看这四个方法对实例(b1)的使用 # 演示代码 class BlackMedium: feature = 'Ugly' def __init__(self, nam

python面向对象二

1.1类的静态属性,类方法,类的静态方法 1.1.1静态属性(@property) 在类中: python内置的@property装饰器就是负责把一个方法(函数)变成属性来调用. class Student: def __init__(self,name,age,score): self.name = name self.age = age self.score = score @property def get_score(self): return self.score def learn(

python面向对象(二)

类的成员 类的成员可以分为三大类:字段.方法和属性 一.字段 字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, 普通字段属于对象 静态字段属于类 class foo: # 字段(静态字段,保存在类里) cc = '111' def __init__(self): # 字段(普通的字段,保存在对象里) self.name = 'mxz' def f1(self): print(self.name) class Province: # 静态字段 cou

Python 面向对象 二

通过此方法communicate  管道 日志模块logging python单独提供 re.split(规则,字符串,1)以第一个符合规则的进行分割. random 模块 将数字转换为字母char(65) = A __init__:构造方法,实例化的时候执行 经典类: 如: class N: pass 新式类: 如: class M(object): pass 一个类不管直接或间接的继承object类就是新式类.推荐使用新式类 两者区别: 继承:java.C# 不支持多继承,python 支持

Java从零开始学四十一(反射简述二)

一.实例化Class类对象 实例化Class类对象的方法有三种: 第一种:通过forName()方法 第二种:类.class 第三种:对象.getClass() 二.Class类的常用方法 No. 方法 类型 描述 1 public static Class<?> forName(String className) throws ClassNotFoundException 普通 传入完整的“包.类”名称实例化Class对象 2 public Constructor[] getConstruc

Python 面向对象(二) 特殊方法

一些Python特殊方法的汇总 __bases__              类的基类,返回元祖__base__                类的基类,也叫父类__call__                  '类名()',类名加括号调用时执行的语句__class__               表示当前操作的对象的类是什么__del__                   析构方法,对象在内存中被释放时,自动触发执行__dict__                  存储类或实例的所有属性

四十一 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)基本的索引和文档CRUD操作、增、删、改、查

elasticsearch(搜索引擎)基本的索引和文档CRUD操作 也就是基本的索引和文档.增.删.改.查.操作 注意:以下操作都是在kibana里操作的 elasticsearch(搜索引擎)都是基于http方法来操作的 GET 请求指定的页面信息,并且返回实体主体 POST 向指定资源提交数据进行处理请求,数据被包含在请求体中,POST请求可能会导致新的资源的建立和/或已有资源的修改 PUT 向服务器传送的数据取代指定的文档的内容 DELETE 请求服务器删除指定的页面 1.索引初始化,相当

十一.python面向对象(接口)

一. 接口 接口类 python 原生不支持 支持多继承 抽象类 python元生支持 不支持多继承 其实在国内使用Youtube,还有Instagram非常简单,前提是你要有一个非常好用的软件或者工具帮忙 我是出于工作需要,找到了一个稳定的办法,苹果和安卓手机都可以流畅使用 具体的办法:搜索公 - 众 - 号:“青山不二”,回复“外面”,跟着教程走下来即可,还真是挺好用的 都可以顺畅的刷外面的网络,油管也可以流畅的看,instagram和twitter更不在话下啦 ~~~ class Wech

Python自动化开发 - 面向对象(二)

本节内容 1.isinstance(obj,cls)和issubclass(sub,super) 2.反射 3.__setattr__,__delattr__,__getattr__ 一. isinstance(obj,cls)和issubclass(sub,super) 1.isinstance(obj,cls) 检查obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() print(isinstance(obj, Foo)) # True 2.