python中的类
前言:
说到类,那么有可能联想到面向对象,不用说python就是面向对象的编程语言,说到面向对象,就会想到面向对象的三大特征,封装、继承、多态。
关于面向对象的解释在这个链接里讲的很详细:
https://www.runoob.com/python/python-object.html
在这里我就简单的说说关于类的操作:
1、创建类:
class Cat(): #这个括号在没有继承其他类时可以不加
#类体
def eat(self):# self:指的是调用该函数的对象 print('小猫爱吃鱼')
print(self)
def drink(self):
print('小猫要喝水')
print(self)
# 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,
按照惯例它的名称是 self。
2、创建实例对象:
cat = Cat()
print(cat)
cat.eat()
cat.drink()
输出:
<__main__.Cat object at 0x000001ECBA73A6D8>
小猫爱吃鱼
<__main__.Cat object at 0x000001ECBA73A6D8>
小猫要喝水
<__main__.Cat object at 0x000001ECBA73A6D8>
3、类的内置属性就是魔法方法,魔法方法我特意做了个总结,在另一篇博文里。
4、添加和获取对象属性
'''
1)、类外面添加属性语法:
对象名.属性名=值
2)、类外面获取对象属性
对象名.属性名
3)、在类里面获取对象属性
'''
class Washer():
def wash(self):
print('洗衣付')
# 类里面获取实例属性
print('洗衣服的宽度%s'%self.width)
print('洗衣服的高度%s'%self.height)
#创建对象
haer1 = Washer()
# 添加属性
haer1.width = 400haer1.height = 50
# 获取属性
print('洗衣服的宽度%s,洗衣服的高度%s'%(haer1.width,haer1.height))
haer1.wash()
输出:
洗衣服的宽度400,洗衣服的高度500
洗衣付
洗衣服的宽度400
洗衣服的高度500
5、类的继承
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 '调用子类方法'
c = Child() # 实例化子类
c.childMethod() # 调用子类的方法
c.parentMethod() # 调用父类方法
c.setAttr(200) # 再次调用父类的方法 - 设置属性值
c.getAttr() # 再次调用父类的方法 - 获取属性值
输出:
调用子类构造方法
调用子类方法
调用父类方法
父类属性 : 200
多继承:
class A: # 定义类 A
.....
class B: # 定义类 B
.....
class C(A, B): # 继承类 A 和 B
.....
你可以使用issubclass()或者isinstance()方法来检测。
issubclass() - 布尔函数判断一个类是另一个类的子类或者子孙类,语法:issubclass(sub,sup)
isinstance(obj, Class) 布尔函数如果obj是Class类的实例对象或者是一个Class子类的实例对象则返回true。
6、方法重写
如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法:
class Parent: # 定义父类
def myMethod(self):
print '调用父类方法'
class Child(Parent): # 定义子类
def myMethod(self):
print '调用子类方法'
c = Child() # 子类实例
c.myMethod() # 子类调用重写方法
输出:
调用子类方法