我是一个Winforms和业务引擎开发人员,他在2年多来第一次使用asp.net,在那段时间我注意到了一些常规更改.
反布局'运动背后的逻辑是什么?
它是否允许使用css类来处理布局,如果是这样,这应该是页面上的问题,你确定它会保持静态,还是只是被认为是"丑陋"?
在过去的几天里,我一直在思考这个问题.我正在编写一个Web应用程序(实际上是在现有的广泛应用程序中添加一个屏幕).我知道使用"表格"进行布局是一个很大的禁忌.但在这个应用程序中,所有页面都使用表格进行布局.我决定使用div来做我的新页面.但我遇到了2个障碍.
我需要做的很多布局工作已经在其他页面上完成了,如果我改用div,我就无法重用其中任何一个(CSS和JS以及那种东西).这导致了更多的工作并推迟了我的完成日期.
布局的一些更复杂的部分使用div很难做到,使用表格很容易.也许它只是我"老派",因为我不是一个web/html有点人(我过去了).
那么,为什么我不能使用表格呢?我不是想要争论,只是想看看除了"正确的事情"类型之外是否有任何引人注目的论点.我知道这是正确的做法.我想知道为什么?
采取以下最小例子:
import abc
class FooClass(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def FooMethod(self):
raise NotImplementedError()
def main():
derived_type = type('Derived', (FooClass,), {})
def BarOverride(self):
print 'Hello, world!'
derived_type.FooMethod = BarOverride
instance = derived_type()
Run Code Online (Sandbox Code Playgroud)
跑步main()让你:
TypeError: Can't instantiate abstract class Derived with abstract methods FooMethod
Run Code Online (Sandbox Code Playgroud)
(该instance = derived_type()行发生异常.)
但FooMethod不应该是抽象的:我已经用它来覆盖它BarOverride.那么,为什么这会引发例外呢?
免责声明:是的,我可以使用显式class语法,并完成完全相同的事情.(甚至更好,我可以使它工作!)但这是一个最小的测试用例,更大的例子是动态创建类.:-)而且我很好奇为什么这不起作用.
编辑:并防止其他明显的非答案:我不想传递BarOverride第三个参数type:在真实的例子中,BarOverride需要derived_type绑定它.如果我可以BarOverride在创建之后定义,则更容易执行此操作derived_type.(如果我不能这样做,为什么呢?)