背景:Python + Seleniumで関数をカプセル化するフレームワークを構築する過程で、この部分が不明瞭になり、ブロックされていることに気付いたので、それを補足するために基本的なpython列を開きました。
概要:Pythonのクラスとオブジェクト。
何も言わないで、まず誰かを紹介させてください~~~
1.クラスを作成して使用します。
まず、オブジェクトとは何かを尋ねられますか?私は言った:すべてがオブジェクトです。
サルは静的な特性を持つオブジェクトです。2つの耳と1つのお尻で生まれます。動的属性:走る、木に登る、お互いに同意しない場合は運転する~~
class Dog():
'''一次模拟小狗的简单尝试'''
# '属性'
def __init__(self,name,age):
'''初始化dog的属性'''
self.name = name
self.age = age
# '方法'
def sit(self):
'''模拟小狗蹲下'''
print(self.name.title() + "is now sitting.")
def roll_over(self):
'''模拟小狗打滚'''
print(self.name.title()+'rolled over!')
# (1)类化为对象,访问属性
a = Dog('habagou1',6).name
b = Dog('habagou2',6).age
print(a,b)
# (2)类化为对象,调用方法
a1 = Dog('habagou3',6).sit()
b1 = Dog('habagou3',6).roll_over()
print(a1)
実際のプロジェクトでは、クラスをどのように使用しますか:コード
# 将鼠标的基础操作视为一个类
class Base():
def __init__(self, driver, log):
self.driver = driver
self.log = FrameLog().log()
# 查找界面上的元素
def findele(self, *args):
return self.driver.find_element(*args)
# 点击
def click(self, *args):
return self.findele(*args).click()
# 发送信息
# noinspection SpellCheckingInspection
def sendkey(self, args, value):
self.findele(*args).send_keys(value)
2.デフォルト値を属性に割り当て、属性値を変更し、属性値をインクリメントします
class Dog():
'''一次模拟小狗的简单尝试'''
# '属性'
def __init__(self,name,age):
'''初始化dog的属性'''
self.name = name
self.age = age
self.a = 0
# '方法'
def sit(self):
'''模拟小狗蹲下'''
print(self.name.title() + "is now sitting.")
def roll_over(self):
'''模拟小狗打滚'''
print(self.name.title()+'rolled over!')
def man_bu(self):
'''小狗漫步'''
print('小狗向前走了' + str(self.a) + '步')
def update_man_bu(self,b):
self.a += b
# # (1)类化为对象,访问属性
# a = Dog('habagou1',6).name
# b = Dog('habagou2',6).age
# print(a,b)
# # (2)类化为对象,调用方法
# a1 = Dog('habagou3',6).sit()
# b1 = Dog('habagou3',6).roll_over()
# print(a1)
# 修改类的默认属性值,且属性值递增
a = Dog('habago4u',6)
print(a.man_bu())
a.update_man_bu(5)
a.update_man_bu(5)
a.update_man_bu(5)
print(a.man_bu())
(3)クラス継承:コードの2番目のクラスには3つのポイントがあります。
class Dog():
'''一次模拟小狗的简单尝试'''
# '属性'
def __init__(self,name,age):
'''初始化dog的属性'''
self.name = name
self.age = age
self.a = 0
# '方法'
def sit(self):
'''模拟小狗蹲下'''
print(self.name.title() + "is now sitting.")
def roll_over(self):
'''模拟小狗打滚'''
print(self.name.title()+'rolled over!')
def man_bu(self):
'''小狗漫步'''
print('小狗向前走了' + str(self.a) + '步')
def update_man_bu(self,b):
self.a += b
class huangsegougou(Dog):
'''这是黄色狗狗'''
# (1)这两行代码中的,super函数让黄色狗狗继承了父类dog的所有属性
def __init__(self,name,age):
super(huangsegougou, self).__init__(name,age)
# (2)将下面的wangcai类的实例直接放在这,只要我调用黄色色狗狗这个类,我的旺财就会“吼一声”
self.wangcai = Wangcai()
# (3)通过覆盖方法名,直接重写了父类的方法。
def man_bu(self):
print('黄色狗狗走了' + str(self.a) + '步')
class Wangcai:
def __init__(self):
print('旺财吼了一声,声如雷!')
4.インポートされたクラス
インポートされたクラスを使用すると、メインプログラムの高レベルのロジックにさらに集中できます。プロジェクトは主にビジネスロジックの実現に重点を置いています。
(1)プロジェクトのbase.pyは、多くの基本クラスを定義し、それらはすべてインポートされます。ベースインポートから*
(2)1つのクラスが複数のクラスを継承できます。、継承するクラスはコンマで区切ります。親クラスの後には、クラス名の後の括弧内に親クラスが続き、複数存在する場合があります。呼び出される親クラスのメソッドが異なる場合は、特定の親クラスのメソッドを呼び出すことです。親クラスの呼び出しメソッドが両方の親クラスにある場合は、先着順の原則に従ってください。
class Dituguanli(UnitBase,Base):
# 如何确保是Base类中的self.find_element()跟unittest中的是一类。
def test_dianjixinwen(self):
self.findele(By.XPATH,"//*[text()='新闻']")
print('跑通了')