gpt4 book ai didi

c# - 定义 Python 类

转载 作者:太空狗 更新时间:2023-10-30 01:14:11 27 4
gpt4 key购买 nike

我正在尝试自学 Python,因此,我得到了一个用 C# 编写的软件,并尝试用 Python 重新编写它。鉴于以下类(class),我有几个问题:

C#

sealed class Message
{
private int messageID;
private string message;
private ConcurrentBag <Employee> messageFor;
private Person messageFrom;
private string calltype;
private string time;


public Message(int iden,string message, Person messageFrom, string calltype,string time)
{
this.MessageIdentification = iden;
this.messageFor = new ConcurrentBag<Employee>();
this.Note = message;
this.MessageFrom = messageFrom;
this.CallType = calltype;
this.MessageTime = time;
}

public ICollection<Employee> ReturnMessageFor
{
get
{
return messageFor.ToArray();
}

}
  1. 在我的类(class)中,我有一个名为 messageFor 的线程安全集合,在 Python 中是否有等效项?如果是这样,我如何在 python 类中实现它?

  2. 我的线程安全集合也有 getter?我将如何在 Python 中做同样的事情?

  3. Python 有 EqualsTo 方法来测试对象之间的相等性吗?或者相当于 Python 中的这个?

        public override bool Equals(object obj)
    {
    if (obj == null)
    {
    return false;
    }

    Message testEquals = obj as Message;

    if((System.Object)testEquals == null)
    {
    return false;
    }

    return (this.messageID == testEquals.messageID) && (this.message == testEquals.message) && (this.messageFor == testEquals.messageFor) && (this.messageFrom == testEquals.messageFrom) && (this.calltype == testEquals.calltype);

    }

    public bool Equals(Message p)
    {
    if ((Object)p == null)
    {
    return false;
    }

    return (this.messageID == p.messageID) && (this.message == p.message) && (this.messageFor == p.messageFor) && (this.messageFrom == p.messageFrom) && (this.calltype == p.calltype);

    }
  4. 你能不能把它密封起来,让任何人都无法继承?

到目前为止我得到了什么:

class Message:


def __init__(self, messageID, message, callType):

self.messageID = messageID
self.message = message
self.callType = callType

最佳答案

In my class I have a thread-safe collection called messageFor, is there an equivalent in Python? If so, how do I implement it in a python class?

一般来说,CPython 的 Global Interpreter Lock防止由于同时访问/修改而导致的崩溃,因为您根本无法实现真正​​的同时评估。所以一个普通的列表可能是合适的,或者你可能需要一个 Queue以防止更高级别的竞争条件。参见 Are lists thread-safe获取更多信息。

I also have a getter for my thread-safe collection? How would I go about doing the same in Python?

您可以使用 @property 装饰器模拟 C# getter/setter 的行为。参见 Python @property versus getters and setters获取更多信息。

Does Python have an EqualsTo method to test equality between objects? Or the equivalent of this in Python?

您可以使用 __eq__ 方法定义相等行为。例如,您的代码可能会转换为类似以下内容:

class Thing:
#other methods go here...
def __eq__(self, other):
if not isinstance(other, Thing):
return False
return self.messageID == other.messageID and self.message == other.message #and... etc

Can you make it sealed, so that no one can inherit from it?

据我所知,这是不可能的。 Python 通常遵循“我们都是成年人”的理念。如果编码人员想继承类或访问对象的属性,那么他们可以;你能做的最好的事情就是在文档中给出一个严厉的建议(或者在 name mangling 的情况下为“私有(private)”属性设置小的减速带)。

关于c# - 定义 Python 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31682208/

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