python面向对象学习摘要

面向对象的编程(objected oriented programming)

简称OOP,是一种编程的思想。OOP把对象当成一个程序的基本单元,一个对象中包含了数据和操作数据的函数。面向对象极大地提升了编程效率,使编程的重用性增高。

  • 多态:一个函数有多种表现形式,调用一个方法有多种形式,但是表现出的方法是不一样的
  • 继承:子项继承父项的某些功能,在程序中表现某种联系
  • 封装:把需要重用的函数或功能封装,方便其他程序直接调用
  • :对具有相同数据或者方法的一组对象的集合
  • 对象:对象是类的一个具体实例

1、封装

封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容

对于面向对象的封装而言,其实就是使用构造方法将内容封装到对象中,然后通过对象直接或者self间接获取被封装的内容。

class wzy:
    def __init__(self,name,age,major):
        self.name = name
        self.age = age
        self.major = major
    def learn(self):
        print(f"{self.name} is learning {self.major}")
    def love(self):
        print(f"{self.name} is {self.age} years old, it's time to love")

hmz = wzy("hmz",21,"Dig Data")
hmz.learn()

2、继承

继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容

  • 子类如果不重写__init__,在实例化子类时会自动调用父类定义的__init__。
  • 子类如果重写了__init__,在实例化子类时就不会再调用父类定义的__init__,此时需要引入super将父类变量进行传入
class wzy:
    def __init__(self,name,age,major):
        self.name = name
        self.age = age
        self.major = major
    def learn(self):
        print(f"{self.name} is learning {self.major}")
    def love(self):
        print(f"{self.name} is {self.age} years old, it's time to love")
        
class hmz(wzy):
    def __init__(self, name, age, major,score):
        # 只用显示传入的变量名即可
        super().__init__(name, age, major)
        self.score = score
    def juan(self,name):
        print(f"I will get {self.score} and juansi {name}")


hmz = hmz("hmz",21,"Dig Data",100)
hmz.juan('wzy')

3、面向对象的各种方法

3.1 静态方法(@staticmethod)

使用@staticmethod将下面的函数和所属的类截断了,这个函数不属于这个类,没有类的属性,不过还是需要通过类名进行调用。

class demo:
    def __init__(self,name):
        self.name = name
    #使用staticmethod方法之后相当于下面的函数和self中的定义将无关,不能再使用self
    @staticmethod
    def hello(name):
        print(f"{self.name} say hello to {name}")

w = demo("wzy")
w.hello("hmz")
3.2 类方法(@classmethod)

类方法只能访问类变量,不能访问实例变量

class person:
    attribute = "person"
    def __init__(self,name,age,gender,attribute):
        self.name = name
        self.age  = age
        self.gender = gender
        self.attribute = attribute
    @classmethod
    #只能访问类中自定义的属性名称
    def say(self):
        # print(f"I am a {self.age}")
        print(f"I am a {self.attribute}")
p = person("wzy",19,'male',12)
p.say()
  • 补充:在预定义类中加入object时继承了类中全部高阶功能,而不加object则仅包含自定义功能和低阶功能。
3.3 属性方法(@property)

把一个方法变成一个静态属性,属性就不用再加小括号了.

class Person(object):
    def __init__(self,name):
        self.name = name
    @property
    def eat(self):
        print(f"{self.name} is eating")
p = Person("wzy")
p.eat

4、高级面向对象

#### 4.1 成员修饰符

python的类中只有公有成员和私有成员两种,在python中没有关键字去修饰成员,默认的所有成员都是公有成员,但是私有成员是以两个下划线开头的名字以标识私有成员,私有成员不能直接访问,只能通过内部方法进行调用,私有成员也不能被继承。

class b(a):
    def __init__(self,name):
        super(b,self).__init__()
        self.name = name
    @property 
    def show(self):
        print(f"self.name = {self.name}")
        #下一行会报错,因为私有变量不能被继承
        # print(f"self.__age = {self.__age}")
        print(f"self.ge = {self.ge}")

obj = b('wzy')
obj.show
4.2特殊成员
  1. __init__:类的构造方法

  2. __del__:类中的析构方法(默认不用写)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值