面向对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象相关的知识,希望对你有一定的参考价值。

备忘录v0.27
import  re
mem_text = """

1.1 安排coop编写一个脚本
1.2 记录一下安总的电话 13522223232
1.3 修改python程序的bug
1.4 回家路上买些水果,蔬菜
1.5 事情还有很多,需要重新安排下
"""
re_date = re.compile(r‘\d.\d‘)

re_date.findall(mem_text)
[‘1.1‘, ‘1.2‘, ‘135‘, ‘222‘, ‘232‘, ‘1.3‘, ‘1.4‘, ‘1.5‘]
import  re
mem_text = """

1.1 安排coop编写一个脚本
1.2 记录一下安总的电话 13522223232
1.3 修改python程序的bug
1.4 回家路上买些水果,蔬菜
1.5 事情还有很多,需要重新安排下
"""
re_date = re.compile(r‘\d\.\d‘)  # . 表示一个任意字符,需要转义 
re_date.findall(mem_text)
[‘1.1‘, ‘1.2‘, ‘1.3‘, ‘1.4‘, ‘1.5‘]
import  re
mem_text = """

1.1 安排coop编写一个脚本
1.2 记录一下安总的电话 13522223232
1.3 修改python程序的bug
1.4 回家路上买些水果,蔬菜
1.5 事情还有很多,需要重新安排下
"""
re_date = re.compile(r‘\d.\d‘)
re_date = re.compile(r‘\d\.\d‘)
re_date = re.compile(r‘\d+\.\d+‘)  # + 表示匹配前面的字符不知一次

re_date.findall(mem_text)
[‘1.1‘, ‘1.2‘, ‘1.3‘, ‘1.4‘, ‘1.5‘]
import  re
mem_text = """

1.1 安排coop编写一个脚本
1.2 记录一下安总的电话 13522223232
1.3 修改python程序的bug
1.4 回家路上买些水果,蔬菜
1.5 事情还有很多,需要重新安排下
"""
re_date = re.compile(r‘\d.\d‘)
re_date = re.compile(r‘\d\.\d‘)
re_date = re.compile(r‘\d+\.\d+‘)  # + 表示匹配前面的字符不知一次
re_date = re.compile(r‘(\d+)\.(\d+)‘)  # 分组然后sub替换

re_date.findall(mem_text)
re_date.sub(r‘\1月\2日‘, mem_text)
‘\n\n1月1日 安排coop编写一个脚本\n1月2日 记录一下安总的电话 13522223232\n1月3日 修改python程序的bug\n1月4日 回家路上买些水果,蔬菜\n1月5日 事情还有很多,需要重新安排下\n‘
import  re
mem_text = """

1.1 安排coop编写一个脚本
1.2 记录一下安总的电话 13522223232
1.3 修改python程序的bug
1.4 回家路上买些水果,蔬菜
1.5 事情还有很多,需要重新安排下
"""
re_date = re.compile(r‘\d.\d‘)
re_date = re.compile(r‘\d\.\d‘)
re_date = re.compile(r‘\d+\.\d+‘)  # + 表示匹配前面的字符不知一次
re_date = re.compile(r‘(\d+)\.(\d+)‘)  # 分组然后sub替换

re_date.findall(mem_text)
print(re_date.sub(r‘\1月\2日‘, mem_text))  # print 处理\n ,回车符
1月1日 安排coop编写一个脚本
1月2日 记录一下安总的电话 13522223232
1月3日 修改python程序的bug
1月4日 回家路上买些水果,蔬菜
1月5日 事情还有很多,需要重新安排下
import  re
mem_text = """

1.1 安排coop编写一个脚本
1.2 记录一下安总的电话 13522223232
1.3 修改python程序的bug
1.4 回家路上买些水果,蔬菜
1.5 事情还有很多,需要重新安排下
"""
re_date = re.compile(r‘\d.\d‘)
re_date = re.compile(r‘\d\.\d‘)
re_date = re.compile(r‘\d+\.\d+‘)  # + 表示匹配前面的字符不知一次
re_date = re.compile(r‘(\d+)\.(\d+)‘)  # 分组然后sub替换
re_date = re.compile(r‘(?P<month>\d+)\.(?P<day>\d+)‘)
# 变量month,day表达的更清晰  ?P<变量> 固定格式
# \g<变量>  固定格式

re_date.findall(mem_text)
# print(re_date.sub(r‘\1月\2日‘, mem_text))  # print 处理\n ,回车符
print(re_date.sub(r‘\g<month>月\g<day>日‘,mem_text))
1月1日 安排coop编写一个脚本
1月2日 记录一下安总的电话 13522223232
1月3日 修改python程序的bug
1月4日 回家路上买些水果,蔬菜
1月5日 事情还有很多,需要重新安排下

class People:
    """定义一个人类"""
    def __init__(self, name, age):  # 初始化方法,头尾双下划线表示特殊方法
        self.name = name        # 类的属性,也就是特点,,特征
        self.age = age
    def walk(self):            # 不同方法,函数、method、function
        "人类的第一步"
        print(f‘{self.name} is walking‘)  # 表示动作,行动,能做的事儿
class Car:
    pass
Car
__main__.Car
c = Car()  # 实例  注意括号
c
<__main__.Car at 0x1cf9b0472e8>
isinstance(c, Car)  # 查看c是否是某个类的实例
True

私有变量: __name,不能被继承

内部变量: _开头

通过方法修改私有数据,对数据进行保护

class  Car:
    name = ‘coop‘
    def __init__(self, brand, price, wheels, power):
        self._brand = brand  # brand内部变量
        self.price = price 
        self.wheels = wheels
        self.power = power
        self.__speed = 0 # 私有变量
    def run(self,action):
        print(f‘{self.brand} is running‘)
        if action == ‘1‘:
            self.__speed += 1*10  # 修改私有变量
            print(f‘当前速度是:{self.__speed}‘)
    def start(self):
        print(f‘{self.brand} is on‘)

    @property  # 装饰器,将speed函数转换成类似与属性的概念,目的:
    def speed(self):  # 只读,getter方法,获取原始值,不能修改
        return self.__speed

    @property
    def brand(self):
        return self._brand

    @brand.setter  # 添加setter方法,可以被赋值
    def brand(self,brand):
        if not isinstance(brand,str):
            raise TypeError(‘牌子是字符串类型‘)  #抛出异常 raise
        self._brand = brand  # 可以对属性进行操作,提前判断

    @property
    def info(self):
        return f‘{self.brand}:{self.price}‘
dazong = Car(‘dazong‘,10,4,‘oil‘)  # 必须现有这一步骤么?
dazong
<__main__.Car at 0x1f12c77bbe0>
dazong.run(1)
dazong is running
dazong.run(‘1‘)
dazong is running
当前速度是:10
###################
dazong.info   #区别于dazong.run(),是因为有了@property的原因
‘dazong:10‘
dazong.speed
10
################
dazong.brand
‘dazong‘
dazong.brand = ‘dazong2018‘
dazong.brand
‘dazong2018‘
dazong.brand = 1111
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-26-5d2373d32d4a> in <module>()
----> 1 dazong.brand = 1111

<ipython-input-12-bfe1a20f9dc0> in brand(self, brand)
     26     def brand(self,brand):
     27         if not isinstance(brand,str):
---> 28             raise TypeError(‘牌子是字符串类型‘)  #抛出异常 raise
     29         self._brand = brand  # 可以对属性进行操作,提前判断
     30 

TypeError: 牌子是字符串类型
Car.brand
<property at 0x1f12c82df98>
tesla = Car(‘tesla‘,10000,4,‘electric‘)
tesla.run(‘1‘)
tesla is running
当前速度是:10
tesla.price
10000
tesla.price = 100
tesla.price
100

以上是关于面向对象的主要内容,如果未能解决你的问题,请参考以下文章

面向面试编程代码片段之GC

PHP面向对象之选择工厂和更新工厂

Java中面向对象的三大特性之封装

python之路之前没搞明白4面向对象(封装)

Scala的面向对象与函数编程

Python面向对象学习之八,装饰器