Python中,类的特点:

 #encoding:utf-8
class Parent(object):
x=1 #x是Parent类的属性(字段)
def __init__(self):
print 'creating Parents instance..' class Child1(Parent):
pass class Child2(Parent):
def __init__(self):
print 'creating Child2 instance..' class Child3(Parent):
def __init__(self):
Parent.__init__(self)#若不调用这一行,将不执行父类的构造函数
print 'creating Child3 instance..'
class MyClass():
def printMe(self):
print 'gege' if __name__=='__main__': '''类属性和实例属性的区别'''
p=Parent()
p.x=11
print Parent.x,p.x
Parent.x=5
print Parent.x,p.x
print '-------------------' '''子类可以通过继承获得父类的属性'''
print Child1.x
print '-------------------' '''观察构造函数的调用'''
c1=Child1()#Child1本身没有构造函数,将调用父类的构造函数
print '-------------------'
c2=Child2()#Child2重写了构造函数,将调用其自身的构造函数,且不再调用父类的构造函数
print '-------------------'
c3=Child3()#Child2重写了构造函数,并且在构造函数内调用了父类的构造函数

输出:

creating Parents instance..
1 11
5 11
-------------------
5
-------------------
creating Parents instance..
-------------------
creating Child2 instance..
-------------------
creating Parents instance..
creating Child3 instance..

Python中类的方法又有怎样的特点?

 #encoding:utf-8
class MyClass():
def doPrint(self):
print 'doPrint invoked..' if __name__=='__main__':
doPrint()#编译不通过,提示 NameError: name 'doPrint' is not defined
MyClass.doPrint()#编译通过,但运行时报错,提示 TypeError: unbound method doPrint() must be called with MyClass instance as first argument (got nothing instead)
MyClass().doPrint()#正确运行,打印出 doPrint invoked..

以上测试说明Python中的类有以下几个特点:

1. Python也有类似Java的静态属性(类属性),但是不用static关键字修饰。那么如何区分类属性还是实例属性?参考第2条

2. Python类中的属性若写成 "类名.属性" 形式,就是类属性,若写成"实例.属性" 形式,就是实例的属性,两者互不干扰(修改类的属性的值,不会改变实例属性的值,反之亦然)

3. 构造函数:如果子类没有,就用父类的;子类有的,就只用子类的,不再调用父类的(这与C++不同),若想调用父类的构造函数必须显式的写成 "父类.__init__(self,其他参数)",其中的self 即子类实例自身。

4. 没有类似Java的类方法(用static修饰),Python类中的方法必须由实例来调用(即所谓的绑定机制,方法必须和实例绑在一起才能调用),"类名.方法"这种写法,语法上没错,但不能执行。

Python类的特点 (1):构造函数与方法的更多相关文章

  1. python 类的私有变量和私有方法

    #!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/11/08 8:46 # @Author : lijunjiang # @Fil ...

  2. Python 类的私有属性与私有方法

    1.隐藏的使用场景 在Python类中,有些属性和方法只希望在对象的内部被使用,而不希望在外部被访问到, 2.定义方式, 在属性名或方法名前增加两个下划线,定义的就是私有属性或方法 #其实这仅仅这是一 ...

  3. python类中的__init__和__new__方法

    Python中类: Python中在创建类的过程中最先调用的不是__init__方法而是__new__方法,__new__方法是一个静态方法,在创建一个类对象时其实是通过__new__方法首先创建出一 ...

  4. Python: 类中为什么要定义__init__()方法

    学习并转自:https://blog.csdn.net/geerniya/article/details/77487941 1. 不用init()方法定义类 定义一个矩形的类,目的是求周长和面积. c ...

  5. 分别给Python类和实例增加属性和方法

    #定义一个类Student class Student(object): pass #给类增加一个属性name Student.name = 'xm' print Student.name # xm ...

  6. python类中的双下划线方法

    __getitem__,__setitem__和__delitem__ 实现了对象属性的字典化操作. class Person: def __init__(self, name, age, hobby ...

  7. Python类的__getitem__和__setitem__特殊方法

    class testsetandget:    kk = {};      def __getitem__(self, key):          return self.kk[key];      ...

  8. python 类属性和实例属性、方法 访问权限问题

    class Animal: cls_attr = 'cls_attr' _cls_attr = '_cls_attr' __cls_attr = '__cls_attr' def __init__(s ...

  9. python类:magic魔术方法

    http://blog.csdn.net/pipisorry/article/details/50708812 魔术方法是面向对象Python语言中的一切.它们是你可以自定义并添加"魔法&q ...

  10. (转)python类:magic魔术方法

    原文:https://blog.csdn.net/pipisorry/article/details/50708812 版权声明:本文为博主皮皮http://blog.csdn.net/pipisor ...

随机推荐

  1. Camera

    Unity摄像机Viewport使用   http://blog.sina.com.cn/s/blog_64ab3f630100y7e7.html http://blog.sina.com.cn/s/ ...

  2. EF--Codefirst 加密数据库连接字符串

    http://www.tuicool.com/articles/QvYbEn 一.EF,CodeFirst加密SQL连接符 public LifeHelpContext() : base(" ...

  3. Autofac.Integration.Mvc分析

    Autofac.Integration.Mvc static ILifetimeScope LifetimeScope { get { return (ILifetimeScope)HttpConte ...

  4. Python之路【第六篇】:面向对象编程相关

    判断类与对象关系 isinstance(obj, cls)  判断对象obj是否是由cls类创建的 #!/usr/bin/env python #-*- coding:utf-8 -*- class ...

  5. RabbitMQ service is already present - only updating service parameters

    如果你安装RabbitMQ不是那么一番顺利..那么你有可能会重装多次.. So..问题来了..重装时你执行   rabbitmq-service install  的时候..有可能就会报这个错了.. ...

  6. ASP.NET MVC使用Bootstrap系列(1)——开始使用Bootstrap

    阅读目录 Bootstrap结构介绍 在ASP.NET MVC 项目中添加Bootstrap文件 为网站创建Layout布局页 使用捆绑打包和压缩来提升网站性能 在Bootstrap项目中使用捆绑打包 ...

  7. java中跳出if判断

    今天学到的一点儿新东西一个if判断里面有好多东西,紧接着还有其他代码,不能使用return来结束这个if判断这时候,就需要这样: out:if (!"null".equals(re ...

  8. 获取实体属性名称(Property)和DisplayName属性名称(Attribute)

    代码: public Dictionary<string, string> XXXModelColumnName { get { var dic = new Dictionary<s ...

  9. 利用SoapUI 测试web service的方法介绍

    1. 简介 SoapUI是用java开发的测试web service的工具. 2. 安装 2.1. 下载地址 http://www.soapui.org/ 2.2. 安装 By downloading ...

  10. Memcached存储命令 - add

    Memcached add 命令用于将 value(数据值) 存储在指定的 key(键) 中. 如果 add 的 key 已经存在,则不会更新数据,之前的值将仍然保持相同,并且您将获得响应 NOT_S ...