写类的步骤:
1、声明一个类:class
2、写个类的名称:啥都行
3、引导然后回车
4、写方法:def
5、类中的方法括号都要加:self
6、构造方法名称长:__init__
使用类:
取名的类= 定义的类()
------------------------------------------类的继承---------------------------------------------------
class Parent: # 定义父类
parentAttr = 100
def __init__(self):
print "调用父类构造函数"
def parentMethod(self):
print '调用父类方法'
def setAttr(self, attr):
Parent.parentAttr = attr
def getAttr(self):
print "父类属性 :", Parent.parentAttr
class Child(Parent): # 定义子类
def __init__(self):
print "调用子类构造方法"
def childMethod(self):
print '调用子类方法 child method'
c = Child() # 实例化子类
c.childMethod() # 调用子类的方法
c.parentMethod() # 调用父类方法
c.setAttr(200) # 再次调用父类的方法
c.getAttr() # 再次调用父类的方法
以上代码执行结果如下:
调用子类构造方法
调用子类方法 child method
调用父类方法
父类属性 : 200
----------------------------------------------子类重写父类方法---------------------------------------------------
class Parent():
def parentMethod(self):
print('父类方法')
class Child(Parent):
def parentMethod(self):
print('父类方法重写')
>>> c=Child ()
>>> c.parentMethod()
父类方法重写
---------------------------重写父类方法后,如果还需要调用父类原本的方法用super()函数--------------------
class A:
def __init__(self):
print('类A的初始化000000000000000')
class B(A):
def __init__(self):
print('类B的初始化 ')
super().__init__() #super函数可实现继承父类A 的__init__方法
b = B()
输出结果:
类A的初始化000000000000000
类B的初始化
-----------------------------------------------私有方法--------------------------------------------------
私有方法,变量,用两个下划线开头__ ,不能在类的外部调用(私有变量只能在调用方法然后方法里有私有变量,才能调用)
class JustCount():
__scount=1
pubcount=1
def count(self):
self.__scount +=1 ##私有变量
self.pubcount +=1
print (self.__scount)
>>> jc=JustCount()
>>> jc.count ()
2
>>> jc.count ()
3
>>> jc.count ()
4
>>> jc.pubcount
4
>>> jc.__scount
Traceback (most recent call last):
File "<pyshell#57>", line 1, in <module>
jc.__scount
AttributeError: 'JustCount' object has no attribute '__scount'
------------------------------------------------------------------------------------------------------------
class JustCount():
pubcount=1
def count(self):
self.pubcount +=1
print self.pubcount)
def _scount(self): ##私有方法
self.pubount += 2
print (self.pubount)
>>> jc=JustCount()
>>> jc.__scount()
Traceback (most recent call last):
File "<pyshell#61>", line 1, in <module>
jc.__scount()
AttributeError: 'JustCount' object has no attribute '__scount'
1、声明一个类:class
2、写个类的名称:啥都行
3、引导然后回车
4、写方法:def
5、类中的方法括号都要加:self
6、构造方法名称长:__init__
使用类:
取名的类= 定义的类()
取名的类.方法名()
在__init__中赋初始时,并在之后修改该属性
class Restaurant():
def __init__(self,restaurant_name,cuisine_type):
self.restaurant_name = restaurant_name
self.cuisine_type = cuisine_type
self.number_served = 0 #新增属性和默认值,但是在参数中没有添加
def describe_restaurant(self):
print(self.restaurant_name,self.cuisine_type,self.number_served)
def open_restaurant(self):
print('opening')
r = Restaurant('sx','bmbs',22) #这是错的,由于在方法中没有添加参数,所以不能赋值
r.number_served = 22 #这是对的,赋值需要另外操作
r.describe_restaurant() #调用3个参数
使用方法对init的初始值进行修改
class Restaurant():
def __init__(self,restaurant_name,cuisine_type):
self.restaurant_name = restaurant_name
self.cuisine_type = cuisine_type
self.number_served = 0
def describe_restaurant(self):
print(self.restaurant_name,self.cuisine_type,self.number_served)
def increment_number_server(self,now_server):
'''该方法对初始值进行赋值,先定一个新的值nowserver,再赋值给初始的numberserved'''
self.now_served = now_server
if now_server >self.number_served:
self.number_served = now_server
else:
print('eror')
r = Restaurant('sx','bmbs')
r.increment_number_server(30) #对该值的使用
r.describe_restaurant()
------------------------------------------类的继承---------------------------------------------------
class Parent: # 定义父类
parentAttr = 100
def __init__(self):
print "调用父类构造函数"
def parentMethod(self):
print '调用父类方法'
def setAttr(self, attr):
Parent.parentAttr = attr
def getAttr(self):
print "父类属性 :", Parent.parentAttr
class Child(Parent): # 定义子类
def __init__(self):
print "调用子类构造方法"
def childMethod(self):
print '调用子类方法 child method'
c = Child() # 实例化子类
c.childMethod() # 调用子类的方法
c.parentMethod() # 调用父类方法
c.setAttr(200) # 再次调用父类的方法
c.getAttr() # 再次调用父类的方法
以上代码执行结果如下:
调用子类构造方法
调用子类方法 child method
调用父类方法
父类属性 : 200
----------------------------------------------子类重写父类方法---------------------------------------------------
class Parent():
def parentMethod(self):
print('父类方法')
class Child(Parent):
def parentMethod(self):
print('父类方法重写')
>>> c=Child ()
>>> c.parentMethod()
父类方法重写
---------------------------重写父类方法后,如果还需要调用父类原本的方法用super()函数--------------------
class A:
def __init__(self):
print('类A的初始化000000000000000')
class B(A):
def __init__(self):
print('类B的初始化 ')
super().__init__() #super函数可实现继承父类A 的__init__方法
b = B()
输出结果:
类A的初始化000000000000000
类B的初始化
-----------------------------------------------私有方法--------------------------------------------------
私有方法,变量,用两个下划线开头__ ,不能在类的外部调用(私有变量只能在调用方法然后方法里有私有变量,才能调用)
class JustCount():
__scount=1
pubcount=1
def count(self):
self.__scount +=1 ##私有变量
self.pubcount +=1
print (self.__scount)
>>> jc=JustCount()
>>> jc.count ()
2
>>> jc.count ()
3
>>> jc.count ()
4
>>> jc.pubcount
4
>>> jc.__scount
Traceback (most recent call last):
File "<pyshell#57>", line 1, in <module>
jc.__scount
AttributeError: 'JustCount' object has no attribute '__scount'
------------------------------------------------------------------------------------------------------------
class JustCount():
pubcount=1
def count(self):
self.pubcount +=1
print self.pubcount)
def _scount(self): ##私有方法
self.pubount += 2
print (self.pubount)
>>> jc=JustCount()
>>> jc.__scount()
Traceback (most recent call last):
File "<pyshell#61>", line 1, in <module>
jc.__scount()
AttributeError: 'JustCount' object has no attribute '__scount'