ruff
                                
                                 ruff copied to clipboard
                                
                                    ruff copied to clipboard
                            
                            
                            
                        SLF001: access to private field of another instance of the same class
Is this a bug or do I understand something wrong?
class Foo:
    def __init__(self) -> None:
        self._value = 0
    
    def get_new_instance_with_another_value(self, value: int) -> "Foo":
        foo = Foo()
        foo._value = value  # SLF001 Private member accessed: `_value`
        return foo
For example, in Java, such code will be valid:
public class Foo {
    private int value = 0;
    
    public Foo getNewInstanceWithAnotherValue(int value) {
        Foo foo = new Foo();
        foo.value = value; // No issues
        return foo;
    }
}
I think it would be reasonable to allow this.
self-like variables in __new__ should also be exempted:
class C:
	def __new__(cls):
		instance = super().__new__(cls)
		instance._foo = 42
		return instance
$ ruff check --select SLF001 foo.py
foo.py:4:3: SLF001 Private member accessed: `_foo`
Found 1 error.
FWIW, it seems SLF001 is already suppressed in some cases like __lt__ (or, perhaps it's not processing correctly in the first place?)
class Wrap:
    def __init__(self, other: Any) -> None:
        if isinstance(other, Wrap):
            self._value = other._value  # SLF001 Private member accessed: `_value`
        else:
            self._value = other
    def __lt__(self, other: Wrap) -> None:
        return id(self._value) < id(other._value)
$ ruff check --select SLF001 /tmp/t.py
/tmp/t.py:4:27: SLF001 Private member accessed: `_value`
Found 1 error.
$ ruff --version
ruff 0.4.1