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类