类定义使用class 关键字
class 类名(父类可有多个 支持多继承):
属性(和java一样)
实例方法
def __init__(self,属性):
self.属性 = 属性
class myclass(object): name = "" id = "" def __init__(self,name): self.name=name def __init__(self,name,id): self.name = name self.id = id def __str__(self): print(self.name+str(self.id)) return super.__str__(self) 无法支持重载 c1 = myclass('a',55) c2 = myclass('b') print(c1) print(c2)
可以依靠默认参数
class myclass(object): name = "" id = "" def __init__(self,name,id=18): self.name = name self.id = id def __str__(self): print(self.name+str(self.id)) return super.__str__(self) c1 = myclass('a',55) c2 = myclass('b') print(c1) print(c2)
属性的增删改查
查 实例类名.属性
c1.name
增加 实例类名.属性 =
c1.age = 18
删除 del实例类名.属性
del(c1.age)
改
c1.name = "asdasd"
python 之中也可以隐藏属性 属性名字前加入__
class myclass(object): name = "" id = "" def __init__(self,name,id=18): self.name = name self.id = id self.__hide = 2 def __str__(self): print(self.name+str(self.id)) return super.__str__(self) c1 = myclass('a',55) #无法直接调用 print(c1.__hide) #类的静态函数、类函数、普通函数、全局变量以及一些内置的属性都是放在类__dict__里的 print(c1.__dict__) #{'name': 'a', 'id': 55, '_myclass__hide': 2} 属性被改名了 #查看隐藏属性 print(c1._myclass__hide)
一般会将一些私有属性(不希望被外部访问的属性)以_开头 但还是能访问 只是代表不要直接访问
@property
可以将方法变成属性
@property def print(self): return "%s-%s"%(self.name,self.id) @property def print2(self): print("%s-%s"%(self.name,self.id))
结果
b-18
b-18
None
@classmethod
和实例无关系 只是和类有关系
class myclass(): static = "static" @classmethod def print_static(cls): print(cls.static) myclass.print_static()
@staticmethod
静态方法 跟java的static void 方法一样 更类的属性无关 就像定义了一个函数 静态方法和静态变量会先进入内存 在内存中独立的一片内存当中进行保存 就是先人 但是实例化后的对象就是后人 后人能使用前人的属性和方法 但是前人却不知道后人的存在 自然也无法使用对象的变量和对象的方法
class myclass(): static = "static" @classmethod def print_static(cls): print(cls.static) @staticmethod def myclassStaticMethod(a,b): print(a+b) myclass.print_static() myclass.myclassStaticMethod(1,2)