2018-12-5 11:00:45
3.0 类的内置方法
python内部类
class People(object):
color = 'yellow'
__age = 30
class Chinese(object):#内部类
name = 'yingzi'
print 'I am chinese'
def __str__(self):
print 'This is People class'
def __init__(self):#类被实例化之后,自动执行
self.color = 'red'
self.think()
def think(self):#类的公有方法
self.color = 'black'
print 'I am %s' %self.color
print 'I am thinker'
print self.__age
def __talk(self):#类的私有方法
print 'I am talking to xx'
@classmethod
def test(self):#类方法
print 'classmethod'
@staticmethod
def test1():#静态方法
print 'staticmethod'
def __del__(self):
self.think
jack = People.Chinese()
内部类实例化
- 直接使用外部类调用内部类
obj = outclass_name.inclass_name()
- 先对外部类实例化,然后再实例化内部类
out = outclass_name()
in = out.inclass_name()
in.method()
魔术方法(内置方法)
- 内置方法在创建好class之后就已经存在了,可以修改
- str(self)
构造函数与析构函数
构造函数:用于初始化类的内部状态,Python提供的构造函数是__init__()
init()
方法是可选的,如果不提供,Python会给出一个默认的
init()方法
析构函数:用于释放对象占用的资源,Python提供的是__del__(),也是可选的
- dict : 类的属性(包含一个字典,由类的数据属性组成)
- doc :类的文档字符串
- name: 类名
- module: 类定义所在的模块(类的全名是’main.className’,如果类位于一个导入模块mymod中,那么className.module 等于 mymod)
- bases : 类的所有父类构成元素(包含了以个由所有父类组成的元组)
对象销毁(垃圾回收,Python有自动回收机制GC)
- 同Java语言一样,Python使用了引用计数这一简单技术来追踪内存中的对象。
- 在Python内部记录着所有使用中的对象各有多少引用。
- 一个内部跟踪变量,称为一个引用计数器。
- 当对象被创建时, 就创建了一个引用计数, 当这个对象不再需要时, 也就是说, 这个对象的引用计数变为0 时, 它被垃圾回收。但是回收不是"立即"的, 由解释器在适当的时机,将垃圾对象占用的内存空间回收。
- 垃圾回收机制不仅针对引用计数为0的对象,同样也可以处理循环引用的情况。循环引用指的是,两个对象相互引用,但是没有其他变量引用他们。这种情况下,仅使用引用计数是不够的。Python 的垃圾收集器实际上是一个引用计数器和一个循环垃圾收集器。作为引用计数的补充, 垃圾收集器也会留心被分配的总量很大(及未通过引用计数销毁的那些)的对象。 在这种情况下, 解释器会暂停下来, 试图清理所有未引用的循环。
#!/usr/bin/python
class Point:
def __init( self, x=0, y=0):
self.x = x
self.y = y
def __del__(self):
class_name = self.__class__.__name__
print class_name, "destroyed"
pt1 = Point()
pt2 = pt1
pt3 = pt1
print id(pt1), id(pt2), id(pt3) # 打印对象的id
del pt1
del pt2
del pt3
<pre>
<p>以上实例运行结果如下:</p>
<pre>
3083401324 3083401324 3083401324
Point destroyed
注意:通常你需要在单独的文件中定义一个类
3.1-3.2 类的继承
- 继承是面向对象的重要特性之一
- 继承关系:
继承是相对两个类而言的父子关系,子类继承了父类的所有公有属性和方法
- 继承实现了代码重用
-需要注意的地方:继承语法 class 派生类名(基类名)://… 基类名写作括号里,基本类是在类定义的时候,在元组之中指明的。
- 在python中继承中的一些特点:
1:在继承中基类的构造(init()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。
2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数
3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。
如果在继承元组中列了一个以上的类,那么它就被称作"多重继承" 。
#!/usr/bin/python
class People(object):#父类,传统方法不需要(object),但是不能用super
color = 'yellow'
def __init__(self,c):
print 'Init...'
self.dwell = 'Earth'
def think(self):
print 'I am %s' %self.color
print 'I am thinker'
class Chinese(People):#继承父类People
def __init__(self):#父类的__init__有连个参数,继承的时候只会继承self。如果有多个参数,需要重新__init__
People.__init__(self,'red')
#super(Chinese,self).__init__('red') #new styly
def talk(self):#子类自己的方法
print 'talking...'
def think(self):#修改父类的think方法
print 'chinses thinking'
cn = Chinese()
cn.think()
cn.talk()
多重继承
- python支持多重继承
- 语法:
class name(Parent1,Parent2….)
注:当父类出现多个自定义的__init__方法时,多重继承只执行第一个,其他的不执行
class People(object):
color = 'yellow'
__age = 30
class Chinese(object):#内部类
name = 'yingzi'
print 'I am chinese'
def __str__(self):
print 'This is People class'
def __init__(self):#类被实例化之后,自动执行
self.color = 'red'
self.think()
def think(self):#类的公有方法
self.color = 'black'
print 'I am %s' %self.color
print 'I am thinker'
print self.__age
def __talk(self):#类的私有方法
print 'I am talking to xx'
@classmethod
def test(self):#类方法
print 'classmethod'
@staticmethod
def test1():#静态方法
print 'staticmethod'
def __del__(self):
self.think
jack = People.Chinese()
- 直接使用外部类调用内部类
obj = outclass_name.inclass_name() - 先对外部类实例化,然后再实例化内部类
out = outclass_name()
in = out.inclass_name()
in.method()
魔术方法(内置方法)
- 内置方法在创建好class之后就已经存在了,可以修改
- str(self)
构造函数与析构函数
构造函数:用于初始化类的内部状态,Python提供的构造函数是__init__()
init()
方法是可选的,如果不提供,Python会给出一个默认的
init()方法
析构函数:用于释放对象占用的资源,Python提供的是__del__(),也是可选的
- dict : 类的属性(包含一个字典,由类的数据属性组成)
- doc :类的文档字符串
- name: 类名
- module: 类定义所在的模块(类的全名是’main.className’,如果类位于一个导入模块mymod中,那么className.module 等于 mymod)
- bases : 类的所有父类构成元素(包含了以个由所有父类组成的元组)
对象销毁(垃圾回收,Python有自动回收机制GC)
- 同Java语言一样,Python使用了引用计数这一简单技术来追踪内存中的对象。
- 在Python内部记录着所有使用中的对象各有多少引用。
- 一个内部跟踪变量,称为一个引用计数器。
- 当对象被创建时, 就创建了一个引用计数, 当这个对象不再需要时, 也就是说, 这个对象的引用计数变为0 时, 它被垃圾回收。但是回收不是"立即"的, 由解释器在适当的时机,将垃圾对象占用的内存空间回收。
- 垃圾回收机制不仅针对引用计数为0的对象,同样也可以处理循环引用的情况。循环引用指的是,两个对象相互引用,但是没有其他变量引用他们。这种情况下,仅使用引用计数是不够的。Python 的垃圾收集器实际上是一个引用计数器和一个循环垃圾收集器。作为引用计数的补充, 垃圾收集器也会留心被分配的总量很大(及未通过引用计数销毁的那些)的对象。 在这种情况下, 解释器会暂停下来, 试图清理所有未引用的循环。
#!/usr/bin/python
class Point:
def __init( self, x=0, y=0):
self.x = x
self.y = y
def __del__(self):
class_name = self.__class__.__name__
print class_name, "destroyed"
pt1 = Point()
pt2 = pt1
pt3 = pt1
print id(pt1), id(pt2), id(pt3) # 打印对象的id
del pt1
del pt2
del pt3
<pre>
<p>以上实例运行结果如下:</p>
<pre>
3083401324 3083401324 3083401324
Point destroyed
注意:通常你需要在单独的文件中定义一个类
3.1-3.2 类的继承
- 继承是面向对象的重要特性之一
- 继承关系:
继承是相对两个类而言的父子关系,子类继承了父类的所有公有属性和方法
- 继承实现了代码重用
-需要注意的地方:继承语法 class 派生类名(基类名)://… 基类名写作括号里,基本类是在类定义的时候,在元组之中指明的。
- 在python中继承中的一些特点:
1:在继承中基类的构造(init()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。
2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数
3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。
如果在继承元组中列了一个以上的类,那么它就被称作"多重继承" 。
#!/usr/bin/python
class People(object):#父类,传统方法不需要(object),但是不能用super
color = 'yellow'
def __init__(self,c):
print 'Init...'
self.dwell = 'Earth'
def think(self):
print 'I am %s' %self.color
print 'I am thinker'
class Chinese(People):#继承父类People
def __init__(self):#父类的__init__有连个参数,继承的时候只会继承self。如果有多个参数,需要重新__init__
People.__init__(self,'red')
#super(Chinese,self).__init__('red') #new styly
def talk(self):#子类自己的方法
print 'talking...'
def think(self):#修改父类的think方法
print 'chinses thinking'
cn = Chinese()
cn.think()
cn.talk()
多重继承
- python支持多重继承
- 语法:
class name(Parent1,Parent2….)
注:当父类出现多个自定义的__init__方法时,多重继承只执行第一个,其他的不执行
构造函数与析构函数
构造函数:用于初始化类的内部状态,Python提供的构造函数是__init__()
init()
方法是可选的,如果不提供,Python会给出一个默认的
init()方法
析构函数:用于释放对象占用的资源,Python提供的是__del__(),也是可选的
- 同Java语言一样,Python使用了引用计数这一简单技术来追踪内存中的对象。
- 在Python内部记录着所有使用中的对象各有多少引用。
- 一个内部跟踪变量,称为一个引用计数器。
- 当对象被创建时, 就创建了一个引用计数, 当这个对象不再需要时, 也就是说, 这个对象的引用计数变为0 时, 它被垃圾回收。但是回收不是"立即"的, 由解释器在适当的时机,将垃圾对象占用的内存空间回收。
- 垃圾回收机制不仅针对引用计数为0的对象,同样也可以处理循环引用的情况。循环引用指的是,两个对象相互引用,但是没有其他变量引用他们。这种情况下,仅使用引用计数是不够的。Python 的垃圾收集器实际上是一个引用计数器和一个循环垃圾收集器。作为引用计数的补充, 垃圾收集器也会留心被分配的总量很大(及未通过引用计数销毁的那些)的对象。 在这种情况下, 解释器会暂停下来, 试图清理所有未引用的循环。
#!/usr/bin/python
class Point:
def __init( self, x=0, y=0):
self.x = x
self.y = y
def __del__(self):
class_name = self.__class__.__name__
print class_name, "destroyed"
pt1 = Point()
pt2 = pt1
pt3 = pt1
print id(pt1), id(pt2), id(pt3) # 打印对象的id
del pt1
del pt2
del pt3
<pre>
<p>以上实例运行结果如下:</p>
<pre>
3083401324 3083401324 3083401324
Point destroyed
注意:通常你需要在单独的文件中定义一个类
3.1-3.2 类的继承
- 继承是面向对象的重要特性之一
- 继承关系:
继承是相对两个类而言的父子关系,子类继承了父类的所有公有属性和方法 - 继承实现了代码重用
-需要注意的地方:继承语法 class 派生类名(基类名)://… 基类名写作括号里,基本类是在类定义的时候,在元组之中指明的。 - 在python中继承中的一些特点:
1:在继承中基类的构造(init()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。
2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数
3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。
如果在继承元组中列了一个以上的类,那么它就被称作"多重继承" 。
#!/usr/bin/python
class People(object):#父类,传统方法不需要(object),但是不能用super
color = 'yellow'
def __init__(self,c):
print 'Init...'
self.dwell = 'Earth'
def think(self):
print 'I am %s' %self.color
print 'I am thinker'
class Chinese(People):#继承父类People
def __init__(self):#父类的__init__有连个参数,继承的时候只会继承self。如果有多个参数,需要重新__init__
People.__init__(self,'red')
#super(Chinese,self).__init__('red') #new styly
def talk(self):#子类自己的方法
print 'talking...'
def think(self):#修改父类的think方法
print 'chinses thinking'
cn = Chinese()
cn.think()
cn.talk()
多重继承
- python支持多重继承
- 语法:
class name(Parent1,Parent2….)
注:当父类出现多个自定义的__init__方法时,多重继承只执行第一个,其他的不执行
class name(Parent1,Parent2….)
注:当父类出现多个自定义的__init__方法时,多重继承只执行第一个,其他的不执行