相关疑难解决方法(0)

如何将具体类名称作为字符串?

我想避免调用很多isinstance()函数,所以我正在寻找一种方法来将实例变量的具体类名称作为字符串.

有任何想法吗?

python

102
推荐指数
3
解决办法
8万
查看次数

获取当前课程的名称?

我如何获得我目前所在班级的名称?

例:

def get_input(class_name):
    [do things]
    return class_name_result

class foo():
    input = get_input([class name goes here])
Run Code Online (Sandbox Code Playgroud)

由于程序的性质,我正在与(vistrails)接口,我不能__init__()用来初始化input.

python class

92
推荐指数
5
解决办法
9万
查看次数

再次进行python循环导入(也就是这个设计有什么问题)

让我们考虑python(3.x)脚本:

main.py:

from test.team import team
from test.user import user

if __name__ == '__main__':
    u = user()
    t = team()
    u.setTeam(t)
    t.setLeader(u)
Run Code Online (Sandbox Code Playgroud)

测试/ user.py:

from test.team import team

class user:
    def setTeam(self, t):
        if issubclass(t, team.__class__):
            self.team = t
Run Code Online (Sandbox Code Playgroud)

测试/ team.py:

from test.user import user

class team:
    def setLeader(self, u):
        if issubclass(u, user.__class__):
            self.leader = u
Run Code Online (Sandbox Code Playgroud)

现在,当然,我已经获得了循环导入和出色的ImportError.

所以,不是pythonista,我有三个问题.首先:

一世.我怎么能让这个东西工作?

并且,知道某人将不可避免地说"循环导入总是表明设计问题",第二个问题来自:

II.为什么这个设计不好?

最后,第三个:

III.什么是更好的选择?

确切地说,上面的类型检查只是一个例子,还有一个基于类的索引层,它允许ie.发现所有用户都是一个团队的成员(用户类有许多子类,因此索引加倍,对于一般用户和每个特定子类)或所有团队都将用户作为成员

编辑:

我希望更详细的例子能够澄清我试图实现的目标.为了可读性省略了文件(但是有一个300kb的源文件让我感到害怕,所以请假设每个类都在不同的文件中)

# ENTITY

class Entity:
    _id    = None
    _defs  = {}
    _data  = None

    def …
Run Code Online (Sandbox Code Playgroud)

python dependencies class-design python-import

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

type(obj)和obj .__ class__之间的区别

type(obj)和之间有什么区别obj.__class__?有可能type(obj) is not obj.__class__吗?

我想编写一个在提供的对象上一般工作的函数,使用与另一个参数相同类型的默认值1.下面的#1或#2哪个变体会做正确的事情?

def f(a, b=None):
  if b is None:
    b = type(a)(1) # #1
    b = a.__class__(1) # #2
Run Code Online (Sandbox Code Playgroud)

python new-style-class

44
推荐指数
4
解决办法
7503
查看次数

为什么`type(myField)`返回`<type'instal'>`而不是`<type'Field'>`?

我遇到了一个python问题.我想用来type()找出我正在使用的变量类型.代码看起来与此类似:

class Foo():
       array=[ myField(23),myField(42),myField("foo"), myField("bar")]
       def returnArr(self):
          for i in self.array:
               print type(i)

if __name__ == "__main__":
    a=Foo()
    a.returnArr()
Run Code Online (Sandbox Code Playgroud)

编辑:myField()是我定义的类.

当我要求type()时,我得到: <type 'instance'>现在根据1,这是因为我使用了一个类元素并要求type()它.现在,我需要的是:<type 'int'>对于例如:myField(42)<type 'str'>myField(foo).我怎么能实现这一点?

编辑:

def __init__(self, name, default, fmt="H"):
    self.name = name
    if fmt[0] in "@=<>!":
        self.fmt = fmt
    else:
        self.fmt = "!"+fmt
    self.default = self.any2i(None,default)
    self.sz = struct.calcsize(self.fmt)
    self.owners = []
Run Code Online (Sandbox Code Playgroud)

代码取自scapy,我尝试调整它.

python

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

python中的__qualname__是什么?

  • __qualname__python中有什么,它有什么用?

  • 为什么我需要使用它__name__

我阅读了文档,但它们并没有帮助我清楚地了解它的用处。

我已阅读获取 Python 类的完全限定名称 (Python 3.3+)
这个问题问的是“如何获得一个合格的名字”,它假定人们知道“合格的名字”的含义。显然,该问题的答案是使用__qualname__属性。

我的问题是什么 __qualname__为什么我应该在__name__.

python python-3.x

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

如何从python中的命名元组获取名称?

我创建一个这样的命名元组:

from collections import namedtuple
spam = namedtuple('eggs', 'x, y, z')
ham = spam(1,2,3)
Run Code Online (Sandbox Code Playgroud)

然后我可以用例如火腿访问元素

>>> ham.x
1
>>> ham.z
3
Run Code Online (Sandbox Code Playgroud)

在翻译中,

>>> ham
eggs(x=1, y=2, z=3)
Run Code Online (Sandbox Code Playgroud)

但是,如果我只想得到"蛋"呢?我能想到的唯一方法是

>>> ham.__repr__.split('(')[0]
'eggs'
Run Code Online (Sandbox Code Playgroud)

但这似乎有点凌乱.这样做有更清洁的方法吗?

如果不使用私有方法无法访问它,为什么命名元组有这种"蛋"方面?

python

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

如何在 __init__ 中获取当前 Python 类名而不管“self”的类?

我有许多带有这样代码的类。每个都__init__启动一个线程和一个带有类名的记录器。如何在自己的定义中获取当前类的名称,作为字符串,在里面__init__?请注意,self可能不是当前类的实例,因此以下内容并非万无一失。

from threading import Thread
import logging

def myClassName(myclass):
    myclass._class_name = myclass.__name__
    return myclass

@myClassName
class SomeClass(object):
    def __init__(self):
        class_name = type(self)._class_name
        print "My class name in __init__ is", class_name
        self.thread = Thread(name=class_name)
        self.logger = logging.getLogger(class_name)
Run Code Online (Sandbox Code Playgroud)

更新:

澄清:

  • 我想要定义的类的名称,而不是传入的对象的类。
  • 我不想硬编码类的名称。
  • 我想让将示例从一个脚本复制/粘贴到
    另一个脚本变得容易,并且对唯一类名的提及越少越好。(继承并不是真正有效,因为有足够多的自定义差异使它变得尴尬。但不小心留下错误类的名称是一个很难找到的错误。)

python class

8
推荐指数
2
解决办法
7980
查看次数

您可以从类中获取实例变量名称吗?

我知道你不应该在程序中使用变量名,但我使用的是严格的调试目的,并希望将变量的名称传达给用户以提高可读性。

我有一个这样的文件:

class MyClass(object):
    def __init__(self):
        pass

    def foo(msg=""):
        debug("Called from the %s instance.") #quazi-print function that only prints when a DEBUG variable is True.
        print(msg)

m = MyClass()
m.foo("Test")
Run Code Online (Sandbox Code Playgroud)

我想m从类本身中检索实例变量名称。虽然这只是一个示例文件,但我使用它向用户传达已在实例变量中的某个属性处创建了原始套接字,并希望显示它的位置(即New socket at m.socket

这对 Python 可行吗?

python class instance-variables instance

7
推荐指数
1
解决办法
1万
查看次数

只获取没有模块等的类名

我可能忽略了一些简单的事情.给定一个类的实例,我想得到类名.例如:

class Foooo: pass
instance = Foooo()

print("instance.__class__ = "+str(instance.__class__))
print("Just the class name: "+str(instance.__class__).split(".")[-1][:-2])
Run Code Online (Sandbox Code Playgroud)

这给出了以下输出:

instance.__class__ = <class '__main__.Foooo'>
Just the class name: Foooo
Run Code Online (Sandbox Code Playgroud)

有什么比这简单

str(instance.__class__).split(".")[-1][:-2]?
Run Code Online (Sandbox Code Playgroud)

如果有帮助的话,我在Python 3.2中

python

5
推荐指数
1
解决办法
2820
查看次数

从类方法访问类名

假设Foo是简单的情况

class Foo:
    def some_func(self):
        print('hellow world')
Run Code Online (Sandbox Code Playgroud)

我只能访问变量func,其中func是:

func = Foo.some_func
Run Code Online (Sandbox Code Playgroud)

我试图Foo从变量中获取类名func

func
Out[6]: <function __main__.Foo.some_func>
func.__class__.__name__
Out[7]: 'function'
Run Code Online (Sandbox Code Playgroud)

Foo 无论如何,我期待得到那样做?

python methods class

3
推荐指数
1
解决办法
155
查看次数

从实例获取模型名称

如何从模型实例获取模型名称作为“字符串”。我知道您可以做类似的事情,type(model_instance) 但这将类本身作为对象<Model_Name: >而不是字符串返回。

python django models

1
推荐指数
1
解决办法
696
查看次数