Python类内部函数第一个参数永远是self,与C++ this类似,指向自身。
__init__函数是构造函数,通过传参初始化。类成员函数前面加__为私有函数,外部不能改变其值。
类内的函数不能重载
class CTest(object):
def __init__(self,name = "Python",num = 3):`在这里插入代码片`
self.__name = name
self.__num = num
def show(self):
print("name:",self.__name,"num:",self.__num)
def __add(self):
self.num += 1
print("num++:",self.num)
Test1 = CTest()
Test1.show()
Test2 = CTest("Class",5)
Test2.__name = "Modle"
Test2.num = 10
Test2.show()
Test2._CTest__name = "Modle"
Test2.show()
Test2._CTest__add()
执行结果
name: Python num: 3
name: Class num: 10
name: Modle num: 10
num++: 11
类将__name转化为_CTest__name,因此修改的__name没有修改到类的__name值。如果需要强行修改__name的值,就必须修改_CTest__name才行。
同理,若想访问私有函数,就必须调用_CTest__add,否则会出错,因为类没有__add函数。
但按照编程语言规则,私有的变量不可改变,因此不能强行修改私有变量
继承
Python的类能够继承,继承的函数能够实现多态功能。
基类被子类继承后,公有的函数和成员变量都会被重载,私有函数和变量不受影响。
#基类1
class CBase(object):
def __init__(self,name = "Base",num = 2):
self.__name = name
self.num = num
def __showName(self,callname):
#被继承之后self属于之类
print("base name:",self.__class__.__name__)
print("call name:",callname)
def show(self):
print("base name:",self.__name,"num:",self.num)
print("base class name:",self.__class__.__name__)
#基类2
class CBaaeShow(object):
def __init__(self,name = "Base Show",num = 2):
self.__name = name
self.__num = num
def baseshow(self):