python中的类(二)

六、类的成员

字段:普通字段,静态字段

eg:

  1. class Province():
  2.  
  3. country=’中国’ #静态字段,保存在类中,执行时可以通过类或对象访问
  4.  
  5. def __init__(self,name):
  6.  
  7. self.name=name #普通字段,保存在对象中,只能通过对象访问
  8.  
  9. print(Province.country) #中国,通过类访问
  10.  
  11. obj=Province(‘河南’)
  12.  
  13. print (obj.name) #河南,通过对象访问
  14.  
  15. printobj.country #中国,通过对象访问

方法:普通方法,静态方法,类方法

应用场景:

普通方法:对象中需要保存一些值,执行某功能时,需要使用对象中的值

静态方法:不需要任何对象中的值

eg:

  1. class Foo():
  2.  
  3. def f1(self): #普通方法,保存在类中,由对象调用,形参self指调用的对象
  4.  
  5. print(123)
  6.  
  7. @staticmethod
  8.  
  9. def f2(a1): #静态方法,self不是必须的形参,保存在类中,可以通过类直接调用
  10.  
  11. print(a1)
  12.  
  13. @classmethod
  14.  
  15. def f3(cls): #类方法,形参cls指当前类名,所以可以通过类访问
  16.  
  17. print

属性

属性实际是方法,只是在在调用时不像调用方法那样在方法名后加括号。

  1. class Foo():
  2.  
  3. @propery #用于执行obj.f4
  4.  
  5. def f4(self):
  6.  
  7. print (789)
  8.  
  9. return 1
  10.  
  11. @f4.settr #用于执行obj.f4=123
  12.  
  13. def f4(self,val)
  14.  
  15. print(val)
  16.  
  17. @f4.deleter #用于执行del obj.f4
  18.  
  19. def f4(self):
  20.  
  21. print(111)
  22.  
  23. 调用:
  24.  
  25. obj=Foo() #创建对象
  26.  
  27. r=obj.f4 #调用属性
  28.  
  29. print (r) #
  30.  
  31. #
  32.  
  33. obj.f4=123 #
  34.  
  35. del obj.f4 #

成员修饰符

类的成员分为共有成员和私有成员。共有成员可以直接访问,而私有成员不可以外部直接访问。

共有成员:

以前创建的成员均为共有成员。

私有成员:

在创建成员时,在成员名前添加两个下划线即可。私有成员虽然外部无法直接访问,但是可以在类的内部访问。父类中的私有成员,子类也不可直接使用。

  1. class Person ( ):
  2.  
  3. def __init__(self,name,age):
  4.  
  5. self.name=name #共有成员
  6.  
  7. self.__age=age #私有成员
  8.  
  9. def show():
  10.  
  11. print ( self.__age)
  12.  
  13. F=Person(‘tom’,18)
  14.  
  15. F.show() #18,通过类内部访问
  16.  
  17. F.name #tom,通过外部访问

特殊成员

__call__

  1. class Call:
  2.  
  3. def __call__(self, *args, **kwargs):
  4. print (‘ok’)
  5.  
  6. #调用方法一
  7.  
  8. F=Call()
  9.  
  10. F() #执行__call__方法,输出ok
  11.  
  12. #调用方法二
  13.  
  14. Call()() #执行__call__方法,输出ok

__str__

一般在print时使用。若不加此方法,print该类的对象时,显示的是该类的内存地址。

eg:

  1. class F():
  2.  
  3. def __init__(self,n,a):
  4.  
  5. self.name=n
  6.  
  7. self.age=a
  8.  
  9. def __str__(self):
  10.  
  11. return self.name
  12.  
  13. #调用
  14.  
  15. A=F(’tom’,18
  16.  
  17. print (A) #tom,执行时类似于print(str(A)),str(A)会自动调用F中的str方法,并获取其返回值

__del__(析构方法)

在该类的对象被销毁时,执行。

__getiterm__

通过索引取值。

eg:

  1. class Person():
  2. def __init__(self, name, age):
  3. self.name = name
  4. self.__age = age
  5. def __getitem__(self, item):
  6. return item+10
  7. F=Person('tom',18)
  8. print (F[2]) #12,自动执行F对象类中__getitem__方法。

__setiterm__

通过索引赋值。

eg:

  1. class Person():
  2.  
  3. def __init__(self, name, age):
  4.  
  5. self.name = name
  6.  
  7. self.__age = age
  8.  
  9. def __setitem__(self, key, value):
  10.  
  11. print (key,value)
  12.  
  13. F=Person('tom',18)
  14. F[3]=222 #3 222,自动执行F对象类中__setitem__方法。

__iter__

如果类中有__iter__方法,则该对象时可迭代对象

对象.__iter__()的返回值是迭代器

for循环遇到可迭代对象,则自动执行对象.__iter__(),生成迭代器,进行for循环。

eg:

  1. class Person():
  2.  
  3. def __init__(self, name, age):
  4.  
  5. self.name = name
  6.  
  7. self.__age = age
  8.  
  9. def __iter__(self):
  10.  
  11. return iter([11, 22, 33])
  12. F=Person('tom',18)
  13. for i in F:
  14. print(i)

metaclass

  1. class F1(type):
  2. def __init__(self,what,bases=None,dict=None):
  3. super(F1, self).__init__(what,bases,dict)
  4. print (1)
  5. def __call__(self):
  6. print (2)
  7. self.__new__(self)
  8. self.__init__(self)
  9. class S(object,metaclass=F1):
  10. def __new__(cls, *args, **kwargs):
  11. pass
  12. def __init__(self):
  13. print (3)

输出结果为:

1

2

3

  1.  

python中的类(二)的更多相关文章

  1. python中的类和实例

    今天花了两个多小时后搜索相关博客看了看python中有关类和实例的介绍,差不多大概明白了. python中的类和c++中的类是一样的,不同之处就是c++的类,如果含有成员变量,并且成员变量发生变化后, ...

  2. Python中的类(一)

    Python中的类(一) 一. 应用场景 如果多个函数中有一些相同的参数时,转换成面向对象. 二. 如何创建类 类是用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法 ...

  3. 关于Python中的类普通继承与super函数继承

    关于Python中的类普通继承与super函数继承 1.super只能用于新式类 2.多重继承super可以保公共父类仅被执行一次 一.首先看下普通继承的写法 二.再看看super继承的写法 参考链接 ...

  4. GO-结构体(类似python中的类)

    一.结构体有名属性 package main import "fmt" func main(){ type Sb struct { name string //属性名,数据类型 a ...

  5. python中元类(metaclass)的理解

    原文地址:http://www.cnblogs.com/tkqasn/p/6524879.html 一:类也是对象 类就是一组用来描述如何生成一个对象的代码. 类也是一个对象,只要你使用关键字clas ...

  6. Python中的类、对象、继承

    类 Python中,类的命名使用帕斯卡命名方式,即首字母大写. Python中定义类的方式如下: class 类名([父类名[,父类名[,...]]]): pass 省略父类名表示该类直接继承自obj ...

  7. 4、Python中的类详解(0601)

    <大话数据结构>的作者程杰在博客园也有博客,网址是:http://cj723.cnblogs.com/ 面向对象编程(OOP) 1.程序 = 指令 + 数据 代码可以选择以指令为核心或以数 ...

  8. Python中的类(上)

    在Python中,可以通过class关键字定义自己的类,然后通过自定义的类对象类创建实例对象. 例如,下面创建了一个Student的类,并且实现了这个类的初始化函数"__init__&quo ...

  9. python中新式类和经典类

    python中的类分为新式类和经典类,具体有什么区别呢?简单的说, 1.新式类都从object继承,经典类不需要. Python 2.x中默认都是经典类,只有显式继承了object才是新式类 Pyth ...

随机推荐

  1. Spring.Net---1、IOC第一个实例

    Spring.NET IoC容器的用法. 通过简单的例子学习Spring.Net 1.先创建一个控制台程序项目. 2.添加IUserInfoDal 接口. namespace Spring.Net { ...

  2. BZOJ P1188 HNOI2007 分裂游戏——solution

    题目描述: (<--这个) 组合游戏,——把每个石头看做一个游戏, Multi_game——消去i上的石子后,,k上的游戏又多了一个: 于是就套用multi_game的模型即可 求解SG函数时, ...

  3. js 对象数组去重

    var arr = [{ "name": "ZYTX", "age": "Y13xG_4wQnOWK1QwJLgg11d0pS4h ...

  4. css 关闭按钮实现

    通过css的伪元素:before,:after以及transform: rotate(45deg);旋转来实现(支持IE9及其以上版本) <div class="close" ...

  5. 【javascript】javasrcipt设计模式之策略模式

    策略模式支持在运行时由使用者选择合适的算法,对于使用者而言不用关心背后的具体事项,而使用者自动根据当前程序执行的上下文和配置,从已有的算法列表中选择出合适的算法来处理当前任务. 1.要解决的问题 2. ...

  6. FineReport如何手动推送APP消息

    在报表填报成功后,发送消息至APP会提示数据已更新.再次期间用户需要有查看该模板的权限,如果没有的话,则无法接受到提示信息.那么在FineReport移动端中,如何手动推送APP消息呢? 具体用法 在 ...

  7. Grunt入门学习之(2) -- Gruntfile的编写

    Gruntfile由以下几部分构成: "wrapper" 函数 项目与任务,目标配置 加载grunt插件和任务 自定义任务 1.wrapper函数(包装函数) 每一个 Gruntf ...

  8. 阿里,百度,腾讯招聘 Java 程序员的技术标准

    阿里巴巴篇 扎实的计算机专业基础,包括算法和数据结构,操作系统,计算机网络,计算机体系结构,数据库等 具有扎实的Java编程基础,理解IO.多线程等基础框架 熟练使用Linux系统的常用命令及shel ...

  9. ubuntu下面解压tar.gz包报错:tar命令报错: gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error

    原因: 压缩包文件不完整(损坏或者其他原因) 比如今天下载的tomcat8,使用ubuntu的命令下载的 curl -O http://apache.mirrors.ionfish.org/tomca ...

  10. C# Winform选项卡集成窗体

    知识要点:利用反射动态的加载窗体到对应的TabPage的. using System; using System.Collections.Generic; using System.Component ...