gpt4 book ai didi

c# - ironpython:有什么方法可以将我的方法与 c# 定义类中的继承方法区分开来?

转载 作者:太空宇宙 更新时间:2023-11-03 11:31:58 25 4
gpt4 key购买 nike

我定义了一个只有一个函数的类。例如:

namespace my.namespace
{
public class MyClass
{
public void some_func(string s1, string s2)
{
// more code here
}
}
}

我能够将此对象加载到 ironpython 解释器中。我想使用内省(introspection)来获取仅在此类中实现的方法列表。在这个例子中,我想要一个像 ['some_func'] 这样的列表。有办法吗?

如果我在这个实例上执行help(instance),我或多或少会得到我想要的:

class MyClass(object)
| MyClass()
|
| Methods defined here:
|
| __repr__(...)
| __repr__(self: object) -> str
|
| some_func(...)
| some_func(self: MyClass, s1: str, s2: str)

当然,当我 d 一个 dir(instance) 时,我得到了很多其他的功能:

>>> dir(instance)
['Equals', 'GetHashCode', 'GetType', 'MemberwiseClone', 'ReferenceEquals', 'ToString', '__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'some_func']

我想知道我需要使用什么内省(introspection)方法来获取仅包含此类特有函数的列表。

最佳答案

您有多种选择。

您可以(明确地)实现 IronPython.Runtime.IPythonMembersList 接口(interface),这样您就可以列出您想要列出的任何成员。就好像您为您的类定义了 __dir__ 方法。

public class MyClass : IronPython.Runtime.IPythonMembersList
{
public void some_func(string s1, string s2) { }

IList<object> IronPython.Runtime.IPythonMembersList.GetMemberNames(CodeContext context)
{
return new[] { "some_func" };
}

IList<string> Microsoft.Scripting.Runtime.IMembersList.GetMemberNames()
{
return new[] { "some_func" };
}
}

你总是可以为你的类定义一个公共(public)的 __dir__ 方法。返回类型实际上可以是任何类型,但您可能希望返回一些字符串集合。

public class MyClass
{
public void some_func(string s1, string s2) { }

public IEnumerable<string> __dir__()
{
return new[] { "some_func" };
}
}

您始终可以选择使用常规 .NET 反射。

from System.Reflection import BindingFlags

# you can omit the flags if you want all public .NET members
flags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly

members = instance.GetType().GetMembers(flags)
dir_members = [ mi.Name for mi in members ]
print(dir_members)

关于c# - ironpython:有什么方法可以将我的方法与 c# 定义类中的继承方法区分开来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7477516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com