class Employee:
#python中属性默认为public
empId="001"
#_表示protected访问修饰符,只有该类和其继承类能访问
_title='hiree'
#__双下划线表示private访问修饰符
__salary=3000
def ressign(self):
'''
python中类方法的定义,必须至少提供一个参数,该参数会在该类方法中作为实例对象的引用,相当于java中的this
一般习惯用self命名该参数
'''
print("{} {} is requesting for ressignation!!!".format(self._title, self.empId))
emp = Employee() #python不需要new关键字创建对象
print(emp.empId) #public属性可以直接访问
emp.ressign() #调用类方法,在方法定义中的self参数,在调用时不用再显示的传入参数,python会自动将对象的引用传入
print('*'*20)
#类的继承
class Janitor (Employee):
'''
python支持多继承,父类列表用逗号分割
当多继承时,会按父类继承顺序从左到右优先查找父类方法和属性
'''
def __init__(self, empId, title, salary):
'''
__init__方法为python中的构造函数
'''
self.empId = empId
self._title = title
self.__salary = salary
def clean(self, location):
'''
python类的定义中不支持方法的重载
即不可定义同名的方法,即使参数列表不同
如果有多个同名方法,会采用最后一个方法,覆盖其他方法
'''
print("{} is cleaning {} ...".format(self.empId, location))
def ressign(self):
'''
ressign方法的重写
'''
print("Janitor {} is requesting ressignation!!!".format(self.empId))
j = Janitor("1001", 'hiree', 2500)
j.clean('abc', 'ccc')
j.clean('pantry')
j.ressign()
python中的静态方法和类方法
'''
静态方法和类方法
'''
class Demo:
name='DDD'
def __init__(self,text):
self.text=text
@staticmethod #装饰器定义静态方法
def showDemo ():
'''
静态方法属于类,方法定义不需要传入self
与java相同,静态方法中不能有this
'''
#静态函数,不能访问类属性name,也不能访问对象属性text
print("this is Demo")
@classmethod #类成员方法
def showClass (clss, val):
#类方法,可以通过clss访问类属性name
#类方法不能访问对象属性text
clss.name=val
print('this is class method {}'.format(clss.name))
#静态方法和类成员方法都直接通过类调用,不需要创建对象调用
Demo.showDemo()
Demo.showClass('111')
d=Demo('demo')
#静态方法和类方法也可以通过对象调用,但实际还是在通过类调用
d.showDemo()
d.showClass('123')