python基础——面向对象编程

python是面向对象的高级语言,面向对象编程的三个特点:1封装2继承3多态,

且与面相过程的C相比注重于 谁来执行的方法,而面向过程的语言注重方法的实现过程。

类与对象的的关系就好比与磨具与磨具制作出来的东西:

class People(object):
    # 类属性
    name = '道德经'
    age = ''
    def __init__(self,fond):
        # 对象属性
        self.fond = fond
    # 对象方法 self 指的是调用方法本身
    def say(self):
        print('Hello')
print(People.name)
p1 = People()
p1.fond = '学习'
p1.say()
People.say(p1)
结果为
D:\pyhon\python.exe D:/课程/第九天/2.对象总结.py
道德经
道德经
学习
Hello
Hello

python的语法比较特殊,类可以调用对象的属性,对象也一样既能调用自己的属性,也能调用类的属性如上面People.say(p1)

就是类调用对象的属性

私有属性

在python的对象属性中,凡是带下划线的,都是不希望外部使用,但并不是说我们不能够使用,如果 _属性名 这种形式,我们可以通过 对象名._属性名 这种形式调用访问,如果 __属性名 我们可以通过 对象名._类名__属性名 这种形式访问:

class People(object):
    def __init__(self,name='',sex='',age='16',fond='学习'):
        self.name =name
        # 防止在类外使用属性使用_调用
        self._sex = sex
        self.__age = age
        self.__fond = fond
p = People()
p.name = '张三'
print(p.name)
p._sex = '男'
print(p._sex)
# 如果有这个属性 则修改属性值为等号后面的值
# 如果没有属性 则添加
p.girlFriend = '小妹'
print(p._People__age)

继承

子继父类,会拥有父类的属性和方法,子类也可以重写父类的属性和方法,也可以自己独有属性和方法。

当子继父类时,想要继承父类的方法或者属性时候我们可以使用super函数来继承:

先定义一个父类:

class People(object):
    def __init__(self,age='77',sex=''):
        self.age = age
        self.sex = sex

    def eat(self):
        print('人类为吃而活')

    def breath(self):
        print('海贼王欧力瓦朗')

然后定义一个子类继承People:

class Man(People):
    def __init__(self,age='',sex='',huZi=''):
        # 继承父类已有的属性
        super(Man,self).__init__(age,sex)
        # self.huZi = huZi

    def smoke(self):
        print('吸烟有害健康')

    def eat(self):
        # 继承父类的eat方法
        super(Man,self).eat()
        print('上面这句话是继承自People的,正在说的这句话才是我自己的')

若父类eat()方法还有其他参数时候我们,继承时也应该传递其他参数例如:

父类为eat(self,other)子类继承则应该写为super(Man,self).eat(other)

若继承多个父类,且父类有同名的方法,会继承第一个父类的方法:

class A(object):
    def say(self):
        print('my name is A')
class B(A):
    def say(self):
        print('my name is B')
class C(A):
    def say(self):
        print('my name is C')
class D(B,C):#B在前面
    pass


猜你喜欢

转载自blog.csdn.net/za_pai_xiao_ba/article/details/80933335