相关疑难解决方法(0)

如何检查变量是否是一个类?

我想知道如何检查变量是否是一个类(不是实例!).

我已经尝试使用该函数isinstance(object, class_or_type_or_tuple)来执行此操作,但我不知道类将具有什么类型.

例如,在以下代码中

class Foo: pass  
isinstance(Foo, **???**) # i want to make this return True.
Run Code Online (Sandbox Code Playgroud)

我试图取代" class"与??? ,但我意识到这class是python中的关键字.

python reflection

216
推荐指数
5
解决办法
14万
查看次数

如果首先可以避免异常,最好"尝试"某些东西并捕获异常或测试?

我应该测试if某些东西是有效的还是只是try为了捕获异常?

  • 有没有可靠的文件说一种方式是首选的?
  • 一种方式更pythonic

例如,我应该:

if len(my_list) >= 4:
    x = my_list[3]
else:
    x = 'NO_ABC'
Run Code Online (Sandbox Code Playgroud)

要么:

try:
    x = my_list[3]
except IndexError:
    x = 'NO_ABC'
Run Code Online (Sandbox Code Playgroud)

一些想法......
PEP 20说:

错误不应该默默地传递.
除非明确沉默.

应该使用a try而不是if被解释为默认传递的错误?如果是这样,你是否通过这种方式使用它来明确地对它进行静音,从而使它成为可能?


不是指的情况下,你只能做的事情1路; 例如:

try:
    import foo
except ImportError:
    import baz
Run Code Online (Sandbox Code Playgroud)

python if-statement exception-handling try-catch pep

125
推荐指数
5
解决办法
4万
查看次数

测试一个类是否从另一个继承

这个问题比Django更相关.我想测试为这个函数写一个测试,我用它来动态地用我设置的字段获取Django表单.

def quiz_form_factory(question):
    properties = {
        'question': forms.IntegerField(widget=forms.HiddenInput, initial=question.id),
        'answers': forms.ModelChoiceField(queryset=question.answers_set)
    }
    return type('QuizForm', (forms.Form,), properties)
Run Code Online (Sandbox Code Playgroud)

我想测试是否,返回的QuizForm类继承自forms.Form.

就像是:

self.assertTrue(QuizForm isinheritedfrom forms.Form)  # I know this does not exist
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

python unit-testing

69
推荐指数
3
解决办法
4万
查看次数

Python类引用的命名约定是什么

在Python中引用类的变量的命名约定是什么?

class MyClass(object):
    pass

# which one is correct?
reference_to_class = MyClass

# or
ReferenceToClass = MyClass
Run Code Online (Sandbox Code Playgroud)

这是另一个类似于我的情况的例子:

# cars.py
class Car(object):
    pass

class Sedan(Car):
    pass

class Coupe(Car):
    pass

class StatonWagon(Car):
    pass

class Van(Car):
    pass

def get_car_class(slug, config):
    return config.get(slug)

# config.py
CONFIG = {
    'ford-mustang': Coupe,
    'buick-riviera': Coupe,
    'chevrolet-caprice': Sedan,
    'chevy-wan' Van:
    'ford-econoline': Van
}

# main.py
from config.py import CONFIG
from cars import get_car_class

MyCarClass = get_car_class('buick-riviera')

my_car = MyCarClass()
Run Code Online (Sandbox Code Playgroud)

我更喜欢ReferenceToClass,每个新来的代码都知道它是一个类,而不是一个实例.但正如@poplitea写的那样,文献参考会很棒.

python pep8 naming-conventions

28
推荐指数
2
解决办法
2万
查看次数