python中定义⼀个动物类_Python类的定义及类的继承⼀,类和类的定义:
*⾯向对象的基础(实现类的过程当中实际上就是对现实事物的进⼀步抽象)
*⼀种类型(类的类型)
*类的实例称之为对象(例如 ‘瓶⼦’是⼀类型的东西, ‘桌⼦上的那个瓶⼦’,⽐较具体 是⼀个对象)
*⼀种⽤户⾃定义的类型
*类⾥⾯有很多⾃定义的属性和⽅法(写代码的时候没有必要把所有的属性⽅法列出来,只需要列出有⽤到的就⾏)
例⼦:Cat类:
属性(变量,属性的名称):名称 种类 ⽪⽑ 猫龄
⾏为(⽅法 函数):爱吃鱼 捉⽼⿏ 喵喵叫
⼆,类的属性和⽅法:
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) 会发现⾥⾯还有很多特殊的属性,如下图
查看⽂档信息 Cat.__doc__ 如下图,可看到代码中的⽂档注释
Cat.__mudule__ 返回模块的名称
help(Cat)
Cat.__class__ 类的实例⼀个指向
Cat.__bases__ 返回⼀个元组显⽰所继承的类
调整代码后 查看bases继承⾃哪⾥:
class Cat(object):
"""猫科动物类"""
def __init__(self,name):
self.name = name
pass
def eat(self):
pass
class Tiger(Cat):
pass
重新进⼊环境:
实例化类和实例化对象三,类的实例:
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('王')
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论