#1.类定义语法
class Car: #类名的首字母一般要大写
def infor(self):
print("This is a car")
car = Car() #实例化对象
car.infor() #对象名.成员,访问成员方法
print(isinstance(car,Car)) #内置方法isinstance()来测试一个对象是否是某个类的实例
print(isinstance(car,str))
#python提供了一个关键字pass,类似于空语句,可以用在类和函数的定义中或者选择结构中,
# 当暂时没有确定如何实现功能,或者为以后的软件升级预留空间时,可以使用该关键字来“占位”
class A:
pass
def demo():
pass
if 5>3:
pass
#2.self参数:代表对象本身
#python中函数和方法不同
class A:
def __init__(self,v):
self.value = v
def show(self):
print(self.value)
a = A(3)
a.show()
#3.类成员与实例成员
#实例属性:一般在构造函数__init__()中定义,定义和使用时必须以self作为前缀
#类属性:是在类中所有方法之外定义的数据成员
#在主程序中或类的外部,实例属性属于实例(对象),只能通过对象名访问,而类属性属于类,可以通过类名或对象名访问。
#python中比较特殊的是:可以动态的为类和对象增加成员
class Car:
price = 100000 #定义类属性
def __init__(self,c):
self.color = c #定义实例属性
car1 = Car("Red") #实例化对象
car2 = Car("Blue")
print(car1.color,Car.price) #color为实例属性,只能通过对象名访问;price为类属性,可以通过类名或对象名访问。
Car.price = 1100000 #修改类属性
Car.name = 'QQ' #增加类属性
car1.color = "Yellow" #修改实例属性
print(car2.color,Car.price,Car.name)
print(car1.color,Car.price,Car.name)
def setSpeed(self,s):
self.speed = s
import types
car1.setSpeed = types.MethodType(setSpeed,car1) #动态为对象增加成员方法
car1.setSpeed(50) #调用对象的成员方法
print(car1.speed)
#python中函数和方法不同.方法一般指与特定实例绑定的函数,通过对象调用方法时,对象本身佳麦烘焙作为第一个参数传递过去,普通函数并不具备这个特点
# class Demo:
# pass
# t = Demo()
# def test(self, v):
# self.value = v
# # t.test = test
# # t.test
# t.test(t,3)
# print(t.value)
#私有成员和公有成员
#在定义类的属性时,如果属性名以两个下划线"__"开头则表示为私有属性,私有属性在类的外部不能直接访问,需要通过调研对象的公有成员方法来访问。
#1._xxx:这样的对象叫保护成员,不能从"from module import *"导入,只有类对象和子类对象才能访问这些成员。
#2.__xxx__:系统定义的特殊成员。
#3.__xxx:类中的私有成员,只有类对象自己能访问,子类对象也不能访问到这个成员,但在对象外部“对象名._类名__xxx”这样的特殊方式来访问。
class Fruit():
def __init__(self):
self.__color = 'Red'
self.price = 1
apple = Fruit()
print(apple.price)
apple.price = 2
print(apple.price)
print(apple.price,apple._Fruit__color) #显示对象私有数据成员的值,对象名._类名__xxx
apple._Fruit__color = 'Blue'
print(apple.price,apple._Fruit__color)
#print(apple.__color) #AttributeError: 'Fruit' object has no attribute '__color',不能直接访问对象的私有数据成员,出错