Python类的特点 (1):构造函数与方法
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):构造函数与方法的更多相关文章
- python 类的私有变量和私有方法
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/11/08 8:46 # @Author : lijunjiang # @Fil ...
- Python 类的私有属性与私有方法
1.隐藏的使用场景 在Python类中,有些属性和方法只希望在对象的内部被使用,而不希望在外部被访问到, 2.定义方式, 在属性名或方法名前增加两个下划线,定义的就是私有属性或方法 #其实这仅仅这是一 ...
- python类中的__init__和__new__方法
Python中类: Python中在创建类的过程中最先调用的不是__init__方法而是__new__方法,__new__方法是一个静态方法,在创建一个类对象时其实是通过__new__方法首先创建出一 ...
- Python: 类中为什么要定义__init__()方法
学习并转自:https://blog.csdn.net/geerniya/article/details/77487941 1. 不用init()方法定义类 定义一个矩形的类,目的是求周长和面积. c ...
- 分别给Python类和实例增加属性和方法
#定义一个类Student class Student(object): pass #给类增加一个属性name Student.name = 'xm' print Student.name # xm ...
- python类中的双下划线方法
__getitem__,__setitem__和__delitem__ 实现了对象属性的字典化操作. class Person: def __init__(self, name, age, hobby ...
- Python类的__getitem__和__setitem__特殊方法
class testsetandget: kk = {}; def __getitem__(self, key): return self.kk[key]; ...
- python 类属性和实例属性、方法 访问权限问题
class Animal: cls_attr = 'cls_attr' _cls_attr = '_cls_attr' __cls_attr = '__cls_attr' def __init__(s ...
- python类:magic魔术方法
http://blog.csdn.net/pipisorry/article/details/50708812 魔术方法是面向对象Python语言中的一切.它们是你可以自定义并添加"魔法&q ...
- (转)python类:magic魔术方法
原文:https://blog.csdn.net/pipisorry/article/details/50708812 版权声明:本文为博主皮皮http://blog.csdn.net/pipisor ...
随机推荐
- TEXshade教程- 多重比对着色软件包
多重比对着色软件包 TEXshade 图解安装教程 [絮语]: TEXshade 是 Latex 的一个宏包,可以对 MSF或 ALN 格式的多重比对文件以不同的方式进行着色美化,并可以对重要的位 ...
- 浅谈JavaScript中的继承
引言 在JavaScript中,实现继承的主要方式是通过原型链技术.这一篇文章我们就通过介绍JavaScript中实现继承的几种方式来慢慢领会JavaScript中继承实现的点点滴滴. 原型链介绍 原 ...
- jquery access方法 有什么用
Jquery设置对象属性的有几种方法1.获取属性attr(name) 2.设置属性attr(name,value)3.批量设置属性attr(properties)4.为所有匹配的元素设置一个计算的属性 ...
- 如何理解clear的css属性?
参考文章: http://www.cnblogs.com/iyangyuan/archive/2013/03/27/2983813.html clear: 只影响使用 clear样式属性的 元素本身, ...
- php对uploads文件的处理问题的解决
解决uploads问题的要点有几点: 参考这篇文章 第一, 在php.ini文件中, 有file_uploads这一节 file_uploads = On ;是否开启文件上传功能, 该功能有很大的安全 ...
- Ubuntu之Mysql安装及基本设置
No1. Mysql 安装 sudo apt-get install mysql-server mysql-client 记得root密码别忘了. No2. 验证Mysql安装 sudo servic ...
- 设置二级域名共享一级域名Cookie和删除共享Cookie
设置共享Cookie: 二级域名要想共享一级域名的cookie,只需要设置cookie.Domain = ".一级域名.com"; 删除共享Cookie: HttpCook ...
- Error: [ng:areq] Argument 'xxxx' is not a function, got undefined
"Error: [ng:areq] Argument 'keywords' is not a function, got undefined" 代码类似这样的: <div n ...
- POJ 2948 Martian Mining
Martian Mining Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 2251 Accepted: 1367 Descri ...
- PHP如何释放内存之unset销毁变量并释放内存详解
PHP的unset()函数用来清除.销毁变量,不用的变量,我们可以用unset()将它销毁.但是某些时候,用unset()却无法达到销毁变量占用的内存!我们先看一个例子: <?php $s = ...