我有一个定义了字符串属性的类。
class Foo(object):
@property
def kind(self):
return 'bar'
我希望将此属性传递给该属性的某些第三方代码断言该属性为str
:
第三方:
def baz(kind):
if not isinstance(kind, (str, unicode)):
message = ('%.1024r has type %s, but expected one of: %s' %
(kind, type(kind), (str, unicode)))
raise TypeError(message)
我:
foo = Foo()
baz(foo.kind)
输出:
TypeError: <property object at 0x11013e940> has type <type 'property'>, but expected one of: (<type 'str'>, <type 'unicode'>)
有什么方法可以让python对象拥有str
类型而不是property
类型的属性?
原始问题是错误的,我实际上是在打电话
Foo.kind
正如下面Martijn Pieters所指出的那样。
答案 0 :(得分:4)
您正在类上直接访问该属性:
>>> Foo.kind
<property object at 0x104a22c00>
>>> baz(Foo.kind)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in baz
TypeError: <property object at 0x104a22c00> has type <type 'property'>, but expected one of: (<type 'str'>, <type 'unicode'>)
如果你确实有一个实例,你发布的功能就可以了:
>>> Foo().kind
'bar'
>>> baz(Foo().kind)
这是因为只有当属性绑定到实例时才会在访问时使用getter函数。绑定到类时,将直接返回property
对象。
答案 1 :(得分:0)
您的代码适用于我:
class Foo(object):
@property
def kind(self):
return 'bar'
def baz(kind):
if not isinstance(kind, (str, unicode)):
message = ('%.1024r has type %s, but expected one of: %s' %
(kind, type(kind), (str, unicode)))
raise TypeError(message)
foo = Foo()
print foo.kind
baz(foo.kind)
--output:--
bar