达内致力于面向IT互联网行业,培养软件开发工程师、测试工程师、系统管理员、智能硬件工程师、UI设计师、网络营销工程师、会计等职场人才。2015年起,推出面向青少年的少儿编程、智能机器人编程、编程数学等K12课程
Python是个非常受欢迎的编程语言,随着近些年机器学习、云计算等技术的发展,Python的职位需求越来越高。
1. 类继承
有如下的一段代码:
class A(object):
def show(self):
print 'base show'class B(A):
def show(self):
print 'derived show'
obj = B()
obj.show()
如何调用类A的show方法了。 方法如下:
obj.__class__ = A
obj.show()
_class_方法指向了类对象,只用给他赋值类型A,然后调用方法show,但是用完了记得修改回来。
2. 方法对象
问题:为了让下面这段代码运行,需要增加哪些代码?
class A(object):
def __init__(self,a,b):
self.__a = a
self.__b = b
def myprint(self):
print 'a=', self.__a, 'b=', self.__b
a1=A(10,20)
a1.myprint()
a1(80)
答案:为了能让对象实例能被直接调用,需要实现call方法
class A(object):
def __init__(self, a, b):
self.__a = a
self.__b = b
def myprint(self):
print 'a=', self.__a, 'b=', self.__b
def __call__(self, num):
print 'call:', num + self.__a
3. new和init
下面这段代码输入什么?
class B(object):
def fn(self):
print 'B fn'
def __init__(self):
print "B INIT"
class A(object):
def fn(self):
print 'A fn'
def __new__(cls,a):
print "NEW", a
if a>10:
return super(A, cls).__new__(cls)
return B()
def __init__(self,a):
print "INIT", aa1 = A(5)a1.fn()a2=A(20)a2.fn()
答案:
NEW 5
B INIT
B fn
NEW 20
INIT 20
A fn
使用new方法,可以决定返回那个对象,也就是创建对象之前,这个可以用于设计模式的单例、工厂模式。init是创建对象是调用的。