Python面向对象

Python既支持函数式编程,也支持面向对象编程

一、类、方法、变量

Python中的类使用class关键字声明,方法使用def声明。

构造方法__init__(self)用来构造对象,其中的self即指一个引用,代表的是对象。

1、Animal类

#创建一个类
class Animal:
    #构造方法,传入两个参数
    def __init__(self,name,age):
        self.name=name
        self.age=age
    #类的方法
    def show(self):
        print("你的名字是{0},今年{1}岁".format(self.name,self.age))

#实例化一个类,创建一个对象
dog=Animal("Tom",18)
dog.show()
你的名字是Tom,今年18岁

2、普通方法、私有方法、静态方法、类方法、成员变量、私有变量
1、普通方法:对象访问
2、私有方法:两个下划线开头,只能在类内部访问
3、静态方法:用 @staticmethod 装饰的不带 self 参数的方法叫做静态方法,类的静态方法可以没有参数,类和对象访问,不能和其他方法重名,不然会相互覆盖,后面定义的会覆盖前面的
4、 类方法: 默认有个 cls 参数,可以被类和对象调用,需要加上 @classmethod 装饰器。 不能和其他方法重名,不然会相互覆盖,后面定义的会覆盖前面的

5、多继承情况下:从左到右查找方法,找到为止,不然就抛出异常

#创建一个类
class Animal:
    # 类变量
    height="40cm"
    #私有属性
    __sex="female"
    #构造方法,传入参数
    def __init__(self,name,age):
        self.name=name
        self.age=age
    #类的普通方法,只能被对象调用
    def show(self):
        print("你的名字是{0},今年{1}岁,身高{2},性别是{3}".format(self.name,self.age,self.height,self.__sex))
        #内部调用
        self.__display()
    #私有方法
    def __display(self):
        print("这是我的私有方法,类的内部可以调用")

    @classmethod
    def hello(cls):
        print("类方法,可以被类和对象访问")
    @staticmethod
    def helloworld():
        print("无参数静态方法,使用类名调用")
        #返回值
        return "hello"

#实例化一个类,创建一个对象
dog=Animal("Tom",18)

dog.show()
#类变量
print(dog.height)
print(Animal.height)
print(dog.name)
Animal.hello()
Animal.helloworld()
你的名字是Tom,今年18岁,身高40cm,性别是female
这是我的私有方法,类的内部可以调用
40cm
40cm
Tom
类方法,可以被类和对象访问
无参数静态方法,使用类名调用

二、继承、封装、多态

面向对象三大特点:继承、封装、多态。子类是可以继承父类的公开属性及方法的,并且Python中是支持多继承的。封装提高了代码的可重用性。多态让代码更加灵活。

对Animal这个类我们删减一点代码,然后让他做父类,来看一个简单的例子。


#创建一个类
class Animal:
    # 类变量
    height="40cm"
    #私有属性
    __sex="female"
    #构造方法,传入参数
    def __init__(self,name,age):
        self.name=name
        self.age=age
    #类的普通方法,只能被对象调用
    def show(self):
        print("你的名字是{0},今年{1}岁,身高{2},性别是{3}".format(self.name,self.age,self.height,self.__sex))
        #内部调用

#继承这个Animal
class Cat(Animal):

    def __init__(self,name,age,color):
        #Animal.__init__(self,name,age)继承构造方法
        super(Cat,self).__init__(name,age)
        print(self.age)
    #继承方法
    def yes(self):
        super(Cat,self).show()
        self.ha()
    def ha(self):
        print("哈哈哈哈")
cat=Cat("Jack",10,"red")
cat.yes()
cat.show()
10
你的名字是Jack,今年10岁,身高40cm,性别是female
哈哈哈哈
你的名字是Jack,今年10岁,身高40cm,性别是female
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值