1莹桅、類和構(gòu)造函數(shù)
構(gòu)造函數(shù):初始化實(shí)例
實(shí)例屬性:定義在方法中的變量昌执,只作用于當(dāng)前實(shí)例
實(shí)例方法:屬于實(shí)例的函數(shù)
1.js主要靠原型創(chuàng)造對象,ES6出現(xiàn)了class語法糖
class People {
//構(gòu)造函數(shù)
//實(shí)例屬性
constructor(name, age) {
this.name = name;
this.age= age;
}
// 實(shí)例方法
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:
#構(gòu)造函數(shù)
#name诈泼、age實(shí)例屬性
def __init__(self, name, age):
self.name = name
self.age = age
# getInfo實(shí)例方法
def getInfo(self):
print "Name : ", self.name, ", Salary: ", self.salary
類方法和靜態(tài)方法
面向?qū)ο蟪绦蛟O(shè)計中仙蚜,類方法和靜態(tài)方法常用術(shù)語
邏輯上講,類方法是只能由類名調(diào)用厂汗,靜態(tài)方法可以有類名和對象名進(jìn)行調(diào)用
在c++中委粉,靜態(tài)方法和類方法邏輯上是等價的,只有一個概念娶桦,不會混淆(es6也是)
但python中贾节,分為三類方法,
類屬性:所有對象共享衷畦,通過類調(diào)用
類方法:屬于類的方法栗涂,只能訪問類變量,不能訪問實(shí)例變量
類方法可以通過類對象或者實(shí)例對象調(diào)用祈争,用途可修改類屬性
python 類屬性 類方法 靜態(tài)方法
1.python里的類屬性斤程,類方法
python里的類方法 可通過實(shí)例 也可以通過類調(diào)用
#!/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里的靜態(tài)方法
靜態(tài)方法:靜態(tài)方法中不需要額外定義參數(shù),因此在靜態(tài)方法中引用類屬性的話菩混,必須通過類對象來引用
class people3:
country="china"
@staticmethod
def getCountry():
return people3.country
p=people3()
print(p.getCountry()) # 實(shí)例調(diào)用靜態(tài)方法 china
print(people3.getCountry()) #類對象調(diào)用靜態(tài)方法 china
注意 python靜態(tài)方法可以通過實(shí)例對象調(diào)用忿墅,而ES6不行
ES6 靜態(tài)方法和靜態(tài)屬性
class Foo {
static classMethod() {
return 'hello';
}
}
Foo.classMethod() // 'hello'
var foo = new Foo();
foo.classMethod()
// TypeError: foo.classMethod is not a functio
這里的靜態(tài)方法又稱為類方法,故而也只能使用類 調(diào)用方法
類相當(dāng)于實(shí)例的原型沮峡,所有在類中定義的方法疚脐,都會被實(shí)例繼承。如果在一個方法前邢疙,加上static關(guān)鍵字棍弄,就表示該方法不會被實(shí)例繼承望薄,而是直接通過類來調(diào)用,這就稱為“靜態(tài)方法”呼畸。
java中的面向?qū)ο?/h3>
1.局部變量:在方法痕支、構(gòu)造方法或者語句塊中定義的變量被稱為局部變量。變量聲明和初始化都是在方法中蛮原,方法結(jié)束后采转,變量就會自動銷毀。
2.成員變量:成員變量是定義在類中瞬痘,方法體之外的變量故慈。這種變量在創(chuàng)建對象的時候?qū)嵗3蓡T變量可以被類中方法框全、構(gòu)造方法和特定類的語句塊訪問察绷。
3.類變量:類變量也聲明在類中,方法體之外津辩,但必須聲明為static類型拆撼。
public class Dog{
String breed;
int age;
String color;
void barking(){
}
void hungry(){
}
void sleeping(){
}
}
構(gòu)造函數(shù):與類同名,可以有多個
public class Puppy{
public Puppy(){
}
public Puppy(String name){
// 這個構(gòu)造器僅有一個參數(shù):name
}
}
一個源文件中只能有一個public類