用python定义一个员工类_Python 类的定义及类的继承

一,类和类的定义:

*面向对象的基础(实现类的过程当中实际上就是对现实事物的进一步抽象)

*一种类型(类的类型)

*类的实例称之为对象(例如 ‘瓶子’是一类型的东西, ‘桌子上的那个瓶子’,比较具体 是一个对象)

*一种用户自定义的类型

*类里面有很多自定义的属性和方法(写代码的时候没有必要把所有的属性方法列出来,只需要列出有用到的就行)

例子:Cat类:

属性(变量,属性的名称):名称 种类 皮毛 猫龄

行为(方法 函数):爱吃鱼 捉老鼠 喵喵叫

b_0_202007161453124741.png

二,类的属性和方法:

1,类的特殊方法:

-构造函数:

*是一种特殊类型的方法(函数),他的类是实例化对象时被调用,构造函数通常用于初始化(赋值)给实例变量

*构造函数还验证有足够的资源来使对象执行任何启动任务

*构造函数是以双下划线(__)开头的函数类型,构造函数的名称是:__init__()

*创建对象时,如果需要,构造函数可接受传参,当创建没有构造函数的类时,Python会自动创建不执行任何操作的默认构造函数

*参数就是对象的属性,比如小王是一个类的话,那么他的名字就是他的一个属性,小王就是属性的值;

语法:

def __init__(self,name,*args,**kwargs):

self.name = name

pass

说明:self代表当前类的实例对象, self.name表示将name绑定到实例上,即该类了有实例属性name, 等号右边的name表示__init__()中的参数name。在访问该属性时可以使用创建的实例对象调用

-析构函数:

*一般不用写,默认就会存在,Python解释器处理内存,不去要是哟个类的时候就自动收回内存

语法:

def __del__(self):

pass

-定义一个类:使用 class 语句来创建一个新类

例如 定义一个Cat的类:

说明 :class 名称(在里面尽量写入object,不仅与python2更有兼容性,即使里面没有东西也可以执行object,写不写一样,但是object换成其他类就是指这个类继承那个类)

class Cat(object):

"""猫科动物类"""

def __init__(self,name):

self.name = name

pass

def eat(self):

pass

2,其他类的特殊方法:

-文档信息:__doc__

-查看模块信息:__module__

-自定义类属性:tag

-自定义的类方法:catch

*进入Python交互式环境,查dir(Cat) 会发现里面还有很多特殊的属性,如下图

b_0_202007161453125683.jpg

查看文档信息 Cat.__doc__  如下图,可看到代码中的文档注释

b_0_202007161453136625.jpg

Cat.__mudule__  返回模块的名称

b_0_202007161453131326.jpg

help(Cat)

b_0_202007161453132268.jpg

Cat.__class__  类的实例一个指向

b_0_202007161453135968.jpg

Cat.__bases__  返回一个元组显示所继承的类

b_0_202007161453143898.jpg

调整代码后 查看bases继承自哪里:

class Cat(object):

"""猫科动物类"""

def __init__(self,name):

self.name = name

pass

def eat(self):

pass

class Tiger(Cat):

pass

重新进入环境:

b_0_202007161453147568.jpg

三,类的实例:

class Cat(object):

# 类的属性,继承这个类的都可以使用

tag = "我是家猫"

def __init__(self,name,salary):

self.name = name

self.salary = salary

def set_salary(self,salary):

"""

改变猫的价钱

:param salary: init价钱

:return: 更改后的价钱

"""

self.salary = salary

return self.salary

def show_catInfo(self):

"""

显示猫的信息

:return:

"""

rest = 'name:{0},salary:{1}元'.format(self.name,self.salary)

print(rest)

return rest

def eat(self):

"""吃"""

print('猫喜欢吃鱼')

def catch(self):

"""捉老鼠"""

print('猫能捉老鼠')

cat1 = Cat('加菲猫','10000')#创建类的对象

cat1.set_salary('20000') #改变加菲猫的价钱

cat1.show_catInfo()

cat1.eat()

cat1.catch()

#内置类属性调用

print('_______________________________________________')

print("Cat.__doc__:",Cat.__doc__)

print("Cat.__name__:", Cat.__name__)

print("Cat.__module__:", Cat.__module__)

print("Cat.__bases__:", Cat.__bases__)

print("Cat.__dict__:", Cat.__dict__)

运行结果:

name:加菲猫,salary:20000元

猫喜欢吃鱼

猫能捉老鼠

_______________________________________________

Cat.__doc__: None

Cat.__name__: Cat

Cat.__module__: __main__

Cat.__bases__: (,)

Cat.__dict__: {'__module__': '__main__', 'tag': '我是家猫', '__init__': , 'set_salary': , 'show_catInfo': , 'eat': , 'catch': , '__dict__': , '__weakref__': , '__doc__': None}

类的实例判断 :isinstance()

print(isinstance(cat1,Cat)) #返回True 是Cat的实例

四,类的继承

实现代码的重用方法之一是通过继承机制

*通过继承创建的新类成为子类或派生类,被继承的类称为基类或者父类

1,继承的特点:

*如果在子类中需要父类的构造方法,就需显式的调用父类的构造方法,或者不重写父类的构造方法

*在调用基类的方法时,需要加上基类的类名前缀,且需要带上self 参数变量 。区别在于类中调用普通函数时并不需要带上self  参数。

*Python总是首先查找对应类型的方法,现在本类中查找调用的方法,找不到才去基类中找

2,子类继承父类的构造说明:

*子类需要自动调用父类的方法:子类不重写__init__()方法,实例化子类后,会自动调用父类的 __init__()方法

class Father(object):

def __init__(self,name):

self.name = name

print('name:{0}'.format(self.name))

def getName(self):

return 'Father:' + self.name

class Son(Father):

def getName(self):

return 'Son:' + self.name

if __name__ == '__main__':

son = Son('王')

print(son.getName())

运行结果:

b_0_202007161453155782.jpg

*子类不需要自动调用父类的方法:子类重写__init__()方法,实例化子类后,将不会自动调用父类的 __init__()方法

class Father(object):

def __init__(self,name):

self.name = name

print('name:{0}'.format(self.name))

def getName(self):

return '小兰的Father:' + self.name

class Son(Father):

def __init__(self,name):

print('老王的孩子')

self.name = name

def getName(self):

return 'Son:'+ self.name

if __name__ == '__main__':

son = Son('王')

print(son.getName())

运行结果:

b_0_202007161453156724.jpg

*子类重写__init__()方法 又需要调用父类 方法:使用super关键字,语法:super(子类,self).__init__(参数1,参数2....)

class Father(object):

def __init__(self,name):

self.name = name

print('name:{0}'.format(self.name))

def getName(self):

return '小兰的Father:' + self.name

class Son(Father):

def __init__(self,name):

super(Son, self).__init__(name)

self.name = name

def getName(self):

return 'Son:'+ self.name

if __name__ == '__main__':

son = Son('王')

print(son.getName())

运行结果:

b_0_202007161453154654.jpg

是否是子类的判断:issubclass()

print(issubclass(Son,Father))

本文地址:https://blog.csdn.net/qq_37029814/article/details/107166469

希望与广大网友互动??

点此进行留言吧!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值