2016-04-05 27 views
1

bir sınıfında kullanılabilir kelime tanımlayın:robotframework: Bir kütüphane, bir modül içinde bir sınıf olarak uygulayan

MyLib.py

class MyLib(ParentLib): 
    def __init__(self): 
    #do stuff 
    pass 

    def keyword(self, arg1): 
    robot.api.logger.console('keyword') 

ParentLib.py

class ParentLib: 
    def __init__(self): 
    pass 

    def parent_keyword(self, arg): 
    robot.api.logger.console('parent keyword') 

Bu kütüphaneyi Library MyLib numaralı telefondan sorun olmadan içe aktarabilirim. Bu sezgisel karşıt görünebilir, ancak MyLib'in Parent Keyword sağlamasını engellemek istiyorum. Eğer bir kullanıcı Parent Keyword istiyorsa, bunların Library ParentLib ile manuel olarak içe aktarılmasını zorunlu tutuyorum. Bu mümkün mü yoksa kütüphanemin uygulanma şeklini yeniden düzenlemem gerekiyor mu?

+0

parent_keyword, herhangi bir ParentLib alt sınıfı tarafından miras alınacaktır. Bunu önlemek istiyorsanız, alt sınıflandırma yapmayın VEYA alt öğe –

+0

@Apero alt sınıfında parent_keyword'ü geçersiz kılın. Robotun, hangi sınıf yönteminin anahtar sözcükler olduğunu tanımlamak için bir yöntem sağlayıp sağlamadığını merak ediyordum. (Biliyorum '__all__' modüller için python işlevselliğinde yerleşiktir.) – ewok

+0

__alll__ burada yardımcı olamaz. parent_keyword bir sınıfın bir yöntemidir, bu nedenle sınıfın içe aktarılabilir olması durumunda yöntemleri ilerlemektedir. –

cevap

3

Açıkça teste maruz olsun hangi anahtar kelimelerin tanımlanması yöntemi get_keyword_names tanımlayabilirsiniz:

class MyLib(ParentLib): 
    ... 
    def get_keyword_names(self): 
     return ["keyword"] 

robotu çerçeve kullanma kılavuzu bu hybrid library çağırır. Şahsen buna karşı tartışırdım. Soruda söylediğin gibi, bu sezgiseldir.

bunu tartışmalı miras fonksiyonları gizlerken diğerinden kaynaklanan devralma olması yerine, ortak bir tabanından hem MyLib ve ParentLib kaynaklanan devralma olması daha iyi olurdu bazı ortak kodu paylaşmak kütüphaneleri anahtar kelime istiyorsanız

. Eğer fonksiyonları gizleyecekseniz, neden ondan devralınırsınız?

+0

olup olmadığını merak ettim, yine de düzgün davranacak mı? Ve sorunuzu cevaplamak için hiçbir fikrim yok. Ben yazmadım. Onunla çalışabilir miyiz diye anlamaya çalışıyoruz ya da kütüphaneyi yeniden düzenlemek için zaman harcamamız gerekiyor. – ewok

+1

@ewok: Sorunuzun yanıtı kullanım kılavuzunda: _ "Bu API kullanıldığında, Robot Framework statik API ile olduğu gibi anahtar sözcükleri uygulayan yöntemleri bulmak için yansıma kullanır. Statik API kullanırken olduğu gibi, argüman ve belgelerden arama yapar. Bu nedenle, dinamik API ile olduğu gibi bağımsız değişkenler ve belgeler almak için özel yöntemlere gerek yoktur. "_ –