我有一个关于在Python中编程的正确方法的问题......也许可以有几种不同的意见,但在这里:
比方说,我有一个类与一对夫妇的私人属性,并且,我已经实现了两个getter/setter方法(不超载__getattr__和__setattr__,但在一个更加"Java的tistic"的风格):
class MyClass:
def __init__(self):
self.__private1 = "Whatever1"
def setPrivate1(self, private1):
if isinstance(private1, str) and (private1.startswith("private")):
self.__private1 = private1
else:
raise AttributeError("Kaputt")
def getPrivate1(self):
return self.__private1
Run Code Online (Sandbox Code Playgroud)
现在让我们说下面几行,在同一个类的另一个方法中,我需要重新设置"_ private1"的值.由于它是同一个类,我仍然可以直接访问private属性self._private1.
我的问题是:我应该使用:
self.setPrivate1("privateBlaBlaBla")
Run Code Online (Sandbox Code Playgroud)
或者我应该直接访问:
self.__private1 ="privateBlaBlaBla"
Run Code Online (Sandbox Code Playgroud)
因为我是设置新值的人,我知道所说的值("privateBlaBlaBla")是正确的(以"私有"开头的str()),所以它不会让系统不一致.另一方面,如果另一个程序员接受我的代码,并且需要更改self .__ private1属性的功能,他将需要遍历所有代码,并查看__private1的值是否已在其他地方手动设置.
我的猜测是正确的做法是始终使用setPrivate1方法,并且只能直接访问get/set中的__private1变量,但我想知道更有经验的Python程序员的意见.
谢谢!
我的代码中有错误
) Fatal error: Call to undefined function pg_num_rows() in C:\QG\www\medical-clinic\manip\updateProduit.php on line 49
Call Stack
# Time Memory Function Location
1 0.0019 386752 {main}( ) ..\updateProduit.php:0
Run Code Online (Sandbox Code Playgroud)
我用的是PHP5 MYSQL这是我原来的代码,我不知道为什么它没有字:
//VERIFICATION SI PRODUIT EXISTE
$query = "
SELECT `panier`.`idProduit`
FROM `panier`, `produit`
WHERE `Produit`.`nom` = '$nom'
AND `panier`.`idPanier` = ".$_SESSION["tempPanierSpec"]."
AND `produit`.`idProduit` = AND `panier`.`idProduit`
";
$result = mysql_query($query);
$numRows = pg_num_rows($result); //NOMBRE DE ROW (DONNEES) DANS LA REPONSE
//SI N'EXISTE PAS
if($numRows == 0){
mysql_query("SELECT `produit`.`idProduit` FROM `produit` WHERE `produit`.`nom` …Run Code Online (Sandbox Code Playgroud) 我正在测试一个网站的下拉菜单,按名称排序.
$nameSort = array();
$numOfNames = $this->getXpathCount("//td[@class='entry']");
for($count = 1; $count <= $numOfNames; $count ++) {
$get = $this->getText("xpath=(//td/a[contains(@href, '')])[$count]");
array_push($nameSort, $get);
}
$test = sort($entrySort);
$this->assertEquals($entrySort, $test);
Run Code Online (Sandbox Code Playgroud)
但它说"有1次失败:
NameTest::testNameTab true does not match expected type "array".
所以我得到了可怕的"黄色死亡屏幕"(这就是.NET家伙所说的),并带有错误信息:
[NullReferenceException: Object reference not set to an instance of an object.]
好的,没关系,我可以理解,但错误引用了一行代码,内容如下:
<namespace1>.<namespace2>.XMLDohickey responseXML =
new <namespace1>.<namespace2>.XMLDohickey();
Run Code Online (Sandbox Code Playgroud)
(名字模糊不清以保护无辜者(:).
我可以很容易地看到后面的行怎么Session[<value>].ToString();可能导致这个错误,但我不明白错误是如何由它声称由它引起的行引起的.
那么,C#是告诉我错误的行号,还是命名空间实际上是空的?
作为旁注 - 这似乎在我公司的DEV和QA服务器上本地工作正常,但似乎它在我们客户的QA服务器上失败了......
所以...这是交易.
显然,当.NET崩溃时,有时会返回最后一个成功的行,而不是实际持有错误的行.在这种情况下,Session[<value>]为空(为什么?不知道."应该永远不会发生").
我有这个链接
http://example.com/example.php?link=<link>&title=<title>&bild=<picturelink>&named=<text>
<>中的每个术语代表一个变量,可以由一个卑鄙的攻击者改变.
<named> = domain-name of <link>
Run Code Online (Sandbox Code Playgroud)
这是处理php文件
<?php
if(strpos($_GET[named],"known.com")!==false or
strpos($_GET[named],"known2.com")!==false or
strpos($_GET[named],"known3.com")!==false)
{
echo '<div align="center"><a href=' .
$_GET[link] .
' target="_blank"><img alt="' .
htmlentities(utf8_decode($_GET[title])) .
'" title="' . htmlentities(utf8_decode($_GET[title])) .
'" src=' . $_GET[bild] .
' border=0></a></div><br><br><b>' .
htmlentities(utf8_decode($_GET[title])) .
'</b><br><br><a href=' .
htmlentities($_GET[link]) .
' target="_blank" style="color: grey;">Text <i>' .
htmlentities(utf8_decode($_GET[title])) . '</i> text ' .
htmlentities($_GET[named]) . '!</a><br>(text)';
}
else
{
echo 'not allowed';
}
?>
Run Code Online (Sandbox Code Playgroud)
怎么能被攻击,你建议对php文件进行哪些更改?