A23-Python基础之面向对象

一、对象

对象 = 属性 + 方法

二、类

示例:

class Student:  #Python中类名首字母大写
    age = 18  #属性
    grade = "高三"
    weight = 60

    def study(self):  #方法
        print("正在学习ing")
    def run(self):
        print("正在跑步ing")

s1 = Student()
print(s1.age)
s1.study()

输出:

18
正在学习ing

三、面向对象

3.1封装:

信息隐蔽。

3.2 继承:

子类自动共享父类之间数据和方法。
示例:

class MyList(list):
    pass
list1 = MyList()
print(list1)
list1.append(1)
print(list1)

输出:

[]
[1]

3.3 多态

不同对象对同一方法响应不同的行动。
示例:

class A:
    def help(self):
        print("i am A")
class B:
    def help(self):
        print("i am B")

a = A()
b = B()
a.help()
b.help()

输出:

i am A
i am B

四、self

Python中self相当于C++的this指针。
示例:

class ball:
    def setName(self,name):
        self.name = name;
    def printName(self):
        print("i am " + self.name);

b1 = ball()
b1.setName("西瓜")
b1.printName()

输出:

i am 西瓜

五、_init_(self)

构造方法,实例化一个对象的时候,那么这个方法就会在对象被创建的时候自动调用。

_init_(self,param1,param2.....)

示例:

class ball:
    def __init__(self,nameLin = "桃子"):	#设置默认参数
        self.name = nameLin
    def setName(self,name):
        self.name = name
    def printName(self):
        print("i am " + self.name)

b1 = ball("西瓜")
b2 = ball()
b1.printName()
b2.printName()

输出:

i am 西瓜
i am 桃子

六、公有和私有

在Python中定义私有变量只需要在变量名或函数名前加上“__”两个下划线,那么这个函数或变量就会为私有的。实际上是伪私有,__xx可以通过_类名__xx调用。
示例:

class ball:
    __name = "西瓜"
    def getName(self):
        return self.__name
b = ball()
print(b.__name) #报错
print(b.getName())  #输出:西瓜
print(b._ball__name)  #输出:西瓜

七、继承

如果子类中定义与父类同名的方法或者属性,则会自动覆盖父类对应的方法或属性。注意子类的_init_(self)方法会覆盖父类的对应方法。解决办法:调用未绑定的父类方法或者使用super函数。

class DerivedClassName(BaseClassName):
	.......

DerivedClassName:子类、派生类
BaseClassName:父类、基类、超类
示例:

class ball:
    name = "球"
    def getMessage(self):
        print("我是圆的")
    def getName(self):
        print(self.name)

class gua(ball):
    name = "西瓜"

c = gua()
c.getMessage()
c.getName()

输出:

我是圆的
西瓜

7.1 调用未绑定的父类方法

在子类_init_(self)方法中,利用下述语句调用:

BaseClassName._init_(self)

7.2 使用super函数(推荐)

不用给定基类名字,在子类_init_(self)方法中,使用下述语句:

super()._init_()

7.3 多重继承

可以继承多个父类的属性和方法:

class BerivedClassName(Base1,Base2,.....):
	..........

八、组合

横向关系:大鱼和小鱼都在水池里。

class bigFish:
    def __init__(self,x):
        self.num = x
class smallFish:
    def __init__(self,y):
        self.num = y
class pool:
    def __init__(self,x,y):
        self.bigfish = bigFish(x)
        self.smallfish = smallFish(y)
    def printNum(self):
        print("水池里有大鱼%d只,小鱼%d只!"%(self.bigfish.num,self.smallfish.num))

p = pool(1,10)
p.printNum()

输出:

水池里有大鱼1只,小鱼10只!

九、类、类对象、实例对象

类相当于房子图纸,类对象则是一个实物模板,实例对象是大家模仿创造的自己的房子。

同一个类中,属性名和方法名相同时,属性名会覆盖方法名。在定义类时,多使用继承和组合机制,并用不同的有意义的词定义属性和方法。

十、绑定

定义:Python严格要求方法需要有实例才能被调用。

十一、内置函数

issubclass(class,classinfo)

如果class是classinfo的子类,返回true。
注意:
1、一个类被认为是其自身的子类
2、classinfo可以是类对象组成的元组,只要class是其中任何一个候选类的子类,则返回true

class A:
    pass
class B(A):
    pass
print(issubclass(B,A))	#True

isinstance(object,classinfo)

检查一个实例对象object是否属于一个类classinfo。
注意:
1、如果第一个参数不是对象,则永远返回False
2、如果第二个参数不是类或者由类对象组成的元组,会抛出一个TypeError异常

hasattr(object,name)

测试一个对象object是否包含指定属性name。name为字符串格式。

getattr(object,name[,default])

相对于hasattr(object,name)而言,当对象不包含指定属性时,抛出异常或者default参数。

setattr(object,name,value)

setattr设定对象中指定属性的值,如果指定属性不存在,则新建该属性并赋值。

delattr(object,name)

删除对象中指定的属性,如果属性不存在,则抛出异常。

property(fget = None,fset = None,fdel = None,doc = None)

通过属性来设置属性。

class A:
    def __init__(self,value=10):
        self.num = value
    def getNum(self):
        return self.num
    def setNum(self,value):
        self.num = value
    def delNum(self):
        del self.num
    x = property(getNum,setNum,delNum)

a = A()
print(a.num)	#10
print(a.x)	#10
a.x = 66
print(a.x)	#66
del a.x	#删除对象

欢迎指正错误!

你可能感兴趣的:(A-Python基础,python,类,面向对象编程)