社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python,重写继承方法的功能

yovel cohen • 5 年前 • 1662 次点击  

我有以下课程。

class PlotOnMap:

    def __init__(self, lat_lon_a, lat_lon_b, optimal, f_map=None):
        self.lat_lon_a = lat_lon_a
        self.lat_lon_b = lat_lon_b
        self.optimal = optimal
        self.f_map = f_map

    def create_map(self):
        """
        This function creates a map with folium, centered with the location of the three given points.
        """
        self.f_map = folium.Map([midlat, midlon], zoom_start=12)

    def plot_gdt_and_triangulation(self):
        """
        This function plots the locations given by the users with markers and create an heat map of the triangulation.
        """
        # plot the gdt's locations.
        folium.Marker(
            location=gdt1,
            popup='GDT 1',
            icon=folium.Icon()
        ).add_to(self.f_map)
        folium.Marker(
            location=gdt2,
            popup='GDT 2',
            icon=folium.Icon()
        ).add_to(self.f_map)
        folium.Marker(
            location=uav,
            popup='Target Area.',
            icon=folium.Icon()
        ).add_to(self.f_map)

        # plot the triangulation (regular and optimal) area
        plugins.HeatMap(data=self.lat_lon_a,
                        ).add_to(self.f_map)
        plugins.HeatMap(data=self.lat_lon_b,
                        ).add_to(self.f_map)
        plugins.HeatMap(data=self.optimal,
                        gradient={0.65: 'lime'}
                        ).add_to(self.f_map)

class Plot2ndPosition(PlotOnMap):

    def __init__(self, lat_lon_a, lat_lon_b, optimal):
        self.plot_on_map = super().__init__(lat_lon_a, lat_lon_b, optimal)

    def plot_map(self):
        return self.plot_on_map.create_map()

    def plot_locations(self):
        return self.plot_on_map.plot_gdt_and_triangulation()

唯一的区别是,在Plot2ndPosition类中,在第二种方法中,我不想绘制gdt2和热图,我只想绘制gdt1和uav(第一个和最后一个标记)。

我考虑了一些事情,将每个变量赋值给一个变量,并在继承方法时以某种方式省略它。

    def plot_gdt_and_triangulation(self):
        """
        This function plots the locations given by the users with markers and create an heat map of the triangulation.
        """
        # plot the gdt's locations.
        one = folium.Marker(
            location=gdt1,
            popup='GDT 1',
            icon=folium.Icon()
        )

        one.add_to(self.f_map)
        two = folium.Marker(
            location=gdt2,
            popup='GDT 2',
            icon=folium.Icon()
        )
        two.add_to(self.f_map)

        three = folium.Marker(
            location=uav,
            popup='Target Area.',
            icon=folium.Icon()
        )
        three.add_to(self.f_map)

        # plot the triangulation (regular and optimal) area
        trian_plot1 = plugins.HeatMap(data=self.lat_lon_a,
                        ).add_to(self.f_map)
        trian_plot2 = plugins.HeatMap(data=self.lat_lon_b,
                        ).add_to(self.f_map)
        trian_plot3 = plugins.HeatMap(data=self.optimal,
                        gradient={0.65: 'lime'}
                        ).add_to(self.f_map)
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/54067
 
1662 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Guy
Reply   •   1 楼
Guy    5 年前

一个选项是覆盖 plot_gdt_and_triangulation() 在里面 Plot2ndPosition

class Plot2ndPosition(PlotOnMap):

    def __init__(self, lat_lon_a, lat_lon_b, optimal):
        super().__init__(lat_lon_a, lat_lon_b, optimal)

    def plot_gdt_and_triangulation(self):
        folium.Marker(
            location=gdt1,
            popup='GDT 1',
            icon=folium.Icon()
        ).add_to(self.f_map)
        folium.Marker(
            location=uav,
            popup='Target Area.',
            icon=folium.Icon()
        ).add_to(self.f_map)

也可以删除 plot_map() ,它只是打电话 create_map() 图2ndposition 实例调用它。如果有更多的逻辑,则不需要将基类保存为成员,它的所有方法都已经可以从 self

def plot_map(self):
    return self.create_map()