1、類和構造函數
構造函數:初始化實例
實例屬性:定義在方法中的變量,只作用于當前實例
實例方法:屬于實例的函數
1.js主要靠原型創造對象,ES6出現了class語法糖
class People {
//構造函數
//實例屬性
constructor(name, age) {
this.name = name;
this.age= age;
}
// 實例方法
getName() {
return this.name;
}
}
var p=new People()
// 以前的原型寫法
function People(name,age){
this.name = name;
this.age= age;
}
People.prototype.getName=function(){
return this.name;
}
...
- python
class People:
#構造函數
#name、age實例屬性
def __init__(self, name, age):
self.name = name
self.age = age
# getInfo實例方法
def getInfo(self):
print "Name : ", self.name, ", Salary: ", self.salary
類方法和靜態方法
面向對象程序設計中,類方法和靜態方法常用術語
邏輯上講,類方法是只能由類名調用,靜態方法可以有類名和對象名進行調用
在c++中,靜態方法和類方法邏輯上是等價的,只有一個概念,不會混淆(es6也是)
但python中,分為三類方法,
類屬性:所有對象共享,通過類調用
類方法:屬于類的方法,只能訪問類變量,不能訪問實例變量
類方法可以通過類對象或者實例對象調用,用途可修改類屬性
python 類屬性 類方法 靜態方法
1.python里的類屬性,類方法
python里的類方法 可通過實例 也可以通過類調用
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Person:
country = 'Chinese' # 類屬性
def __init__(self, name, country):
self.name = name
self.country = country
@classmethod
def nationality(cls): # 這里將sefl 改為 cls
print('Bigberg is %s.' % cls.country)
p = Person('Bigberg', 'CN')
print Person.country #Chinese
Person.nationality() #Bigberg is Chinese.
p.nationality() #Bigberg is Chinese.
2.python里的靜態方法
靜態方法:靜態方法中不需要額外定義參數,因此在靜態方法中引用類屬性的話,必須通過類對象來引用
class people3:
country="china"
@staticmethod
def getCountry():
return people3.country
p=people3()
print(p.getCountry()) # 實例調用靜態方法 china
print(people3.getCountry()) #類對象調用靜態方法 china
注意 python靜態方法可以通過實例對象調用,而ES6不行
ES6 靜態方法和靜態屬性
class Foo {
static classMethod() {
return 'hello';
}
}
Foo.classMethod() // 'hello'
var foo = new Foo();
foo.classMethod()
// TypeError: foo.classMethod is not a functio
這里的靜態方法又稱為類方法,故而也只能使用類 調用方法
類相當于實例的原型,所有在類中定義的方法,都會被實例繼承。如果在一個方法前,加上static關鍵字,就表示該方法不會被實例繼承,而是直接通過類來調用,這就稱為“靜態方法”。
java中的面向對象
1.局部變量:在方法、構造方法或者語句塊中定義的變量被稱為局部變量。變量聲明和初始化都是在方法中,方法結束后,變量就會自動銷毀。
2.成員變量:成員變量是定義在類中,方法體之外的變量。這種變量在創建對象的時候實例化。成員變量可以被類中方法、構造方法和特定類的語句塊訪問。
3.類變量:類變量也聲明在類中,方法體之外,但必須聲明為static類型。
public class Dog{
String breed;
int age;
String color;
void barking(){
}
void hungry(){
}
void sleeping(){
}
}
構造函數:與類同名,可以有多個
public class Puppy{
public Puppy(){
}
public Puppy(String name){
// 這個構造器僅有一個參數:name
}
}
一個源文件中只能有一個public類