gpt4 book ai didi

python - 将对象 C 从 A 类发送到 B 类

转载 作者:太空宇宙 更新时间:2023-11-03 13:23:37 24 4
gpt4 key购买 nike

我不知道如何在我的系统中设计类。

在 classA 中,我创建对象 selenium(它模拟网站上的用户操作)。

在这个 ClassA 中,我创建了另一个对象,如 SearchScreen、Payment_Screen 和 Summary_Screen。

# -*- coding: utf-8 -*-
from selenium import selenium
import unittest, time, re

class OurSiteTestCases(unittest.TestCase):
def setUp(self):
self.verificationErrors = []

self.selenium = selenium("localhost", 5555, "*chrome", "http://www.someaddress.com/")
time.sleep(5)
self.selenium.start()

def test_buy_coffee(self):

sel = self.selenium

sel.open('/')
sel.window_maximize()

search_screen=SearchScreen(self.selenium)
search_screen.choose('lavazza')

payment_screen=PaymentScreen(self.selenium)
payment_screen.fill_test_data()

summary_screen=SummaryScreen(selenium)
summary_screen.accept()


def tearDown(self):
self.selenium.stop()
self.assertEqual([], self.verificationErrors)

if __name__ == "__main__":
unittest.main()

这是示例 SearchScreen 模块:

class SearchScreen:
def __init__(self,selenium):
self.selenium=selenium

def search(self):
self.selenium.click('css=button.search')

我想知道这些类的设计是否有问题?

最佳答案

你的方法很好。您有一组工具类,每个工具类都需要知道其目标。然后,您将拥有一个工具包类,用于在特定目标上协调这些工具。

class AgreePrice:
def __init__(self, connection): ...

class PlaceOrder:
def __init__(self, connection): ...

class ConfirmAvailability:
def __init__(self, connection): ...

class BookingService:
def __init__(self, connection): ...

def book(self):
for Command in (ConfirmAvailability, AgreePrice, PlaceOrder):
command = Command(self.connection)
command.run()
assert command.success()

这些类型的类结构没有任何问题,事实上它们一直都在出现,并且当单个“工具”类不能方便地放在一个函数中时,它们是一种相当不错的设计。

如果您发现自己的类中有数十个方法,其中许多方法可以根据特定任务进行分组,那么这是一个很好的重构。

作为一般规则,您要确保您的“工具”类(SearchScreen 等)在概念上处于低于您的 Controller (您的测试用例)的级别。它们适合您。

这些工具类最简单的形式是 Function Object设计模式。尽管在您的情况下,您在每个对象上调用的方法不止一个,因此它们稍微复杂一些。


或者,简而言之。您的设计很好,而且很常见。

关于python - 将对象 C 从 A 类发送到 B 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5165990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com