python中的类(二)

六、类的成员

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

eg:

class Province():

      country=’中国’  #静态字段,保存在类中,执行时可以通过类或对象访问

      def __init__(self,name):

             self.name=name             #普通字段,保存在对象中,只能通过对象访问

print(Province.country)         #中国,通过类访问

obj=Province(‘河南’)

print (obj.name)                    #河南,通过对象访问

print(obj.country)             #中国,通过对象访问

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

应用场景:

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

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

eg:

class Foo():

      def f1(self):         #普通方法,保存在类中,由对象调用,形参self指调用的对象

             print(123)

      @staticmethod

      def f2(a1):    #静态方法,self不是必须的形参,保存在类中,可以通过类直接调用

             print(a1)

      @classmethod

      def f3(cls):   #类方法,形参cls指当前类名,所以可以通过类访问

             print

属性

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

class Foo():

      @propery           #用于执行obj.f4

      def f4(self):

             print (789)

      return 1

      @f4.settr                    #用于执行obj.f4=123

      def f4(self,val)

             print(val)

      @f4.deleter        #用于执行del obj.f4

      def f4(self):

             print(111)

调用:

obj=Foo()          #创建对象

r=obj.f4                    #调用属性

print (r)              #

                           #

obj.f4=123         #

del obj.f4                  #

成员修饰符

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

共有成员:

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

私有成员:

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

class Person ( ):

      def __init__(self,name,age):

             self.name=name      #共有成员

             self.__age=age  #私有成员

      def show():

             print ( self.__age)

F=Person(‘tom’,18)

F.show()                    #18,通过类内部访问

F.name              #tom,通过外部访问

特殊成员

__call__

class Call:

    def __call__(self, *args, **kwargs):
print (‘ok’) #调用方法一 F=Call() F() #执行__call__方法,输出ok #调用方法二 Call()() #执行__call__方法,输出ok

__str__

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

eg:

class F():

      def __init__(self,n,a):

             self.name=n

             self.age=a

      def __str__(self):

             return self.name

#调用

      A=F(’tom’,18)

      print (A)              #tom,执行时类似于print(str(A)),str(A)会自动调用F中的str方法,并获取其返回值

__del__(析构方法)

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

__getiterm__

通过索引取值。

eg:

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

__setiterm__

通过索引赋值。

eg:

class Person():

    def __init__(self, name, age):

        self.name = name

        self.__age = age

    def __setitem__(self, key, value):

    print (key,value)

F=Person('tom',18)
F[3]=222 #3 222,自动执行F对象类中__setitem__方法。

__iter__

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

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

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

eg:

class Person():

    def __init__(self, name, age):

        self.name = name

        self.__age = age

    def __iter__(self):

        return iter([11, 22, 33])
F=Person('tom',18)
for i in F:
print(i)

metaclass

class F1(type):
def __init__(self,what,bases=None,dict=None):
super(F1, self).__init__(what,bases,dict)
print (1)
def __call__(self):
print (2)
self.__new__(self)
self.__init__(self)
class S(object,metaclass=F1):
def __new__(cls, *args, **kwargs):
pass
def __init__(self):
print (3)

输出结果为:

1

2

3

 

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. 【7】.net WebAPI Owin OAuth 2.0 密码模式验证实例

    1.OAuth密码模式 2.在VS中创建WebAPI项目 在nuget中安装: Microsoft.AspNet.WebApi.Owin Microsoft.Owin.Host.SystemWeb 这 ...

  2. 设计模式入门,适配器模式,c++代码实现

    // test07.cpp : Defines the entry point for the console application.// #include "stdafx.h" ...

  3. 由上一个血案引发的关于property和attribute关系的思考

    boss说,学习要刨根问底. 好的,开刨. 一.property和attribute在英语里有什么区别 看似没有区别.但其实大神说: property是 物体本身自带属性,不能改变的(一旦改了就是另外 ...

  4. BZOJ2476: 战场的数目(矩阵快速幂)

    题意 题目链接 Sol 神仙题Orzzz 考虑两边是否有\(1\) 设\(f[i]\)表示周长为\(2i\)的方案数 第一种情况:左侧或右侧有一个1,那么把这个1删去,对应的方案数为\(f[i - 1 ...

  5. 用CSS3/JS绘制自己想要的按钮

    我认为按钮的绘制分以下三个步骤 第一步,绘制按钮的轮廓 选择合适的html标签,设置轮廓的CSS /* html代码 */ <a href="#" class="b ...

  6. void()表达式结果是SyntaxError

    void是一元运算符,他出现在操作数之前,操作数可以使任意类型,操作数会照常计算,但忽略计算结果并返回undefined. 因此在操作数具有副作用的时候使用void来让程序根据语义 console.l ...

  7. 关于修改bug的思考

     作者:朱金灿 来源:http://blog.csdn.net/clever101 有软件就有bug,这意味着软件研发不仅仅是新功能开发,更要拿出相当一部分精力去修改bug.但基本很多软件开发者并 ...

  8. Google APAC----Africa 2010, Qualification Round(Problem B. Reverse Words)----Perl 解法

    原题地址链接:https://code.google.com/codejam/contest/351101/dashboard#s=p1 问题描述: Problem Given a list of s ...

  9. String对象内存分析

    Java中内存分析: 栈(Stack) :存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中). 堆(heap): ...

  10. 新建虚拟机,每次都提示无法连接虚拟设备 ide1:0

    处理方式:看到了这个老哥http://www.cnblogs.com/dean-du/p/6888513.html的博客,发现问题是一样的,所以记录一下. 将虚拟机设置中的CD/DVD选项中的连接更改 ...