2017-08-08 81 views
1

JavaScript構造+創建對象,例如的Javascript`this` VS Python的`self`構造

//Constructor 
function Course(title,instructor,level,published,views){ 
    this.title = title; 
    this.instructor = instructor; 
    this.level = level; 
    this.published = published; 
    this.views = views; 
    this.updateViews = function() { 
     return ++this.views; 
    } 
} 

//Create Objects 
var a = new Course("A title", "A instructor", 1, true, 0); 
var b = new Course("B title", "B instructor", 1, true, 123456); 

//Log out objects properties and methods 
console.log(a.title); // "A Title" 
console.log(b.updateViews()); // "123457" 

什麼是Python相當於此? (構造函數/或類+創建對象實例+註銷屬性&方法?)

self從Python和從Javascript this之間的差?

+3

非常多,沒有區別。儘管在python中,「self」是慣例,你可以任意調用它。另外,你必須把它作爲你的構造函數的第一個參數,而JS只是本能地知道這個是什麼 – inspectorG4dget

+0

你有沒有諮詢[關於類的Python文檔](https://docs.python.org/3 /tutorial/classes.html)? –

+0

您的問題標題已轉換 – Mangohero1

回答

2

這裏是一個Python翻譯:

class Course: 

    def __init__(self,title,instructor,level,published,views) 

     self.title = title 
     self.instructor = instructor 
     self.level = level 
     self.published = published 
     self.views = views 

    def update_views(self): 
     return self.views += 1 

您必須聲明一個類,然後初始化類,如下所示:

course = Course("title","instructor","level","published",0) 

一些顯着的區別是,自我是不是隱含可用,但實際上是該類的所有實例函數的必需參數。但是,您應該參考 the documentation獲取更多信息。

+0

所以在python中,你必須在類中單獨定義屬性/方法(用'def')? – Kagerjay

+2

@Kagerjay huh?不,從根本上講Python和Javascript有不同的OOP模型。 Javascript使用基於原型的繼承,而Python使用基於類的繼承。我相信課程在ECM6中介紹過。請注意,您可以*在構造函數中動態地將函數屬性添加到Python中的實例,但它們不會被繼承。 –

+0

以及我要去做一些更多的閱讀感謝信息:) – Kagerjay

0

有蟒解決一些錯誤固定,現在

#Constructors 
class Course: 

    def __init__(self,title,instructor,level,published,views): 

     self.propTitle = title 
     self.propInstructor = instructor 
     self.propLevel = level 
     self.propPublished = published 
     self.propViews = views 

    def update_views(self): 
     self.propViews += 1 
     return self.propViews 

# Create objects 
courseA = Course("A title", "A instructor", 1, True, 0) 
courseB = Course("B title", "B instructor", 1, True, 123456) 

# Print object property and use object method 
print(courseA.propTitle) 
print(courseB.update_views()) 

結果打印出來

冠軍

使用print(courseB.update_views)輸出這雖然, <bound method Course.update_views of <__main__.Course object at 0x7f9f79978908>>,你se print(courseB.update_views())

+1

只需使用(),像這樣'courseB.update_views()' – Igor

+1

@Igor是對的。您必須調用該方法。它不是電腦物業。 – modesitt

+0

好的,謝謝我現在修復它,我命名一切'prop'前綴,所以它清楚地告訴我哪些值是參數,哪些不是 – Kagerjay

相關問題