Python中的静态初始值设定项

2024-05-26 20:46:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题与Is there a static constructor or static initializer in Python?相似。不过,我还是不太明白如何像在Java中那样实现静态构造函数:

public class TestBuilder {
    private String uid;
    private String name;
    private double speed;

    public static final TestBuilder SLEEPY;
    public static final TestBuilder SPEEDY;

    static {
        SLEEPY = new TestBuilder("1", "slow test", 500.00);
        SPEEDY = new TestBuilder("2", "fast test", 2000.00);
    }

    private TestBuilder(String uid, String name, double speed){
        this.uid = uid;
        this.name = name;
        this.speed = speed;
    }

    public double getSpeed(){
        return speed;
    }

    public String getUid() {
        return uid;
    }

    public String getName() {
        return name;
    }

从另一个类调用javaTestBuilder.SLEEPY测试生成器访问填充的类。在

在python中,我尝试过:

^{pr2}$

然后在另一个模块中我尝试了:

from examples.testbuilder import TestBuilder
import unittest

class Tester(unittest.TestCase):

    def test_builder(self):
        dummy = TestBuilder
        ref = dummy.SPEEDY
        sleepyid = dummy.lookupByName("slow test")
        self.assertTrue(dummy.SPEEDY.__str__() == ref.__str__())
        self.assertEqual(1, sleepyid)

但是,在dummy.lookupByName(“慢测试”)打电话来,不知道为什么。 这看起来像是一种生成类似于Java静态初始化器的功能的“pythonic”方法吗?有其他选择吗?在


Tags: nametestuidstringreturnstaticprivatepublic
1条回答
网友
1楼 · 发布于 2024-05-26 20:46:14

问题是lookupByName不是静态的,需要隐式的第一个参数self。在类定义中使用staticmethod修饰符:

class TestBuilder:
    ...
    @staticmethod
    def lookupByName(name):
        result = None
        ...

这个问题有关于静态方法的更多信息:Static methods in Python?

相关问题 更多 >

    热门问题