小编Ste*_* D.的帖子

与类访问修饰符相比,限制较少的成员访问修饰符有什么用?

假设我有一个带有一些成员的类,并且这些成员的限制访问修饰符比类本身少。

一个具体的例子可能是:

package apples;

class A { // package private
    public int foo() { // public (=> less restrictive than *package private*)
        return 42;
    }
}
Run Code Online (Sandbox Code Playgroud)

据我所知,一个访问修饰符的限制要比成员访问修饰符的限制更大,它将覆盖限制性较小的成员访问修饰符。因此,限制较少的成员访问修饰符应该完全无效。

  • 我的理解正确吗?
    • 如果没有,后果是什么?
  • 限制成员访问修饰符较少的正当理由是什么?
  • 最后,有什么最佳实践可遵循?

我也做了一些试验,因为我认为一旦开始传递函数引用,它可能会产生后果,但是即使那样,访问修饰符似乎也没有关系。

我构造的情况如下:

  • apples.B提供bla()返回对的引用的公共方法apples.A.foo
  • 然后pizzas.C调用apples.B.bla获取A.foo对它的引用并对其进行调用。
  • 因此对A.foo()不能直接看到C,而只能通过间接访问B.bla()

我已经对其进行了测试,并且无论是否将foo() 的访问修饰符设为私有,这都没有什么不同。

package apples;

import java.util.function.IntSupplier;

public class B { …
Run Code Online (Sandbox Code Playgroud)

java oop access-modifiers

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

使用Pony ORM或sqlalchemy时,在哪里创建数据库对象?

我开始尝试使用对象关系映射器(特别是Pony ORM)。

Pony中,所有实体定义都继承自类db.Entity。然而,为了做到这一点,当然db需要首先在某个地方创建对象。(db.Entity有点类似于sqlalchemy中的声明性基础,所以我相信下面的问题对于sqlalchemy也同样有效)

我在 Pony ORM 文档中看到的所有示例都提供了内联示例,其中数据库对象db只是在声明实体之前在解释器提示符中声明。

这给我留下了一个问题:我应该在“真实”项目中在哪里创建我的数据库对象?

特别考虑这样的情况:我希望将实体定义与实际使用这些实体的位置分开(假设我只想构建一个漂亮的 ORM 包装器包来访问数据库,然后应该在多个不同的其他项目中使用该数据库)。然后我可能希望用户提供db根据他们的需要配置的自己的对象,以便访问数据库。

一些示例代码:

假设我有一个存储人员地址的数据库,我的包my_orm应该为该数据库提供一个 ORM,然后将其用于app.py

my_orm/初始化.py

from my_orm.person import Person
from my_orm.address import Address
Run Code Online (Sandbox Code Playgroud)

my_orm/person.py:

from pony.orm import Required

class Person(db.Entity): # Where should `db` be defined?
    name = Required(str)
    age = Required(int)
Run Code Online (Sandbox Code Playgroud)

my_orm/address.py:

from pony.orm import Required

class Address(db.Entity): # Where should `db` …
Run Code Online (Sandbox Code Playgroud)

python orm sqlalchemy ponyorm

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

标签 统计

access-modifiers ×1

java ×1

oop ×1

orm ×1

ponyorm ×1

python ×1

sqlalchemy ×1