我想知道如何检查变量是否是一个类(不是实例!).
我已经尝试使用该函数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中的关键字.
我应该测试if某些东西是有效的还是只是try为了捕获异常?
例如,我应该:
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) 这个问题比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中引用类的变量的命名约定是什么?
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写的那样,文献参考会很棒.