通过变量获取属性

时间:2018-05-05 14:07:45

标签: python python-3.x

基本上我试图使用周期表库创建一个小程序,我试图创建第一个返回给定元素质量的函数。

        FirefoxOptions foptions = new FirefoxOptions();
        foptions.setCapability("marionette", false);
        WebDriver driver = new FirefoxDriver(foptions);
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.navigate().to("https://us.justdial.com/NY/New-York/Afghani-Restaurants/ct-16110200");
        WebElement rightclickelement = driver.findElement(By.xpath("/html/body/div[1]/div[1]/div/section/div[5]/div[2]/div[2]/ul/li[1]/div/div[2]/h2/a"));
        Actions action = new Actions(driver);
        action.contextClick(rightclickelement).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform();

但是这不起作用,因为我试图使用变量而不是属性,所以它说:

def mass():
    Element = input("Element?   ")
    return periodictable.Element.mass

将质量函数与元素周期表一起使用的正确方法应该是:

Traceback (most recent call last):
File "<string>", line 424, in run_nodebug
File "<module1>", line 25, in <module>
File "<module1>", line 22, in main
File "<module1>", line 15, in mass
AttributeError: module 'periodictable' has no attribute 'Element'

所以我要问的是:我可以给一个带变量的属性,还是有其他解决方案让用户选择元素?

2 个答案:

答案 0 :(得分:3)

该模块似乎具有以下功能:

periodictable.elements.symbol(Element).mass

如果您还需要按名称访问元素等,此帮助页面可能很有用:

help(periodictable.elements)

此类事情的一般方法是使用getattr:

getattr(periodictable, Element).mass

但是这也会找到“periodictable”的其他属性,比如它定义的函数等等,所以最好避免使用这种类型的应用程序来查找程序用户输入的内容。

答案 1 :(得分:1)

您可以使用getattr

>>> import periodictable
>>> periodictable.Na.mass
22.98977
>>> element = 'Na'
>>> getattr(periodictable, element).mass
22.98977